Discord 如何挂钩到特定进程的音频中?



通过谷歌搜索结果,没有一种广为人知的方法可以从Microsoft Windows上的特定应用程序捕获音频,至少不必求助于变通方法,例如将音频从一个进程发送到单独的虚拟音频环回设备(然而,这会导致无法听到声音,除非您使用硬件环回播放设备或通过主输出"收听"模拟输入(。

这些解决方案很笨重,需要为每个特定的应用程序和软件进行配置,如果在执行过程中更改了输出设备,软件通常会表现不佳,不再成功发出任何声音或直接停止工作。与此同时,发起了一场"Discord";实时流媒体";会话允许您轻松无故障地通过VoIP群呼共享单个应用程序的声音。来自其他应用程序的声音已完全删除。从音频设备来看,似乎没有发生虚拟环回路由,客户端的音频播放绝对没有中断。该功能在macOS或Linux版本的软件上不可用,仅在Windows上可用。因此,在Win32中,从特定进程捕获声音是可能的,但为什么没有其他人这样做呢?比如说,在像OBS或Audacity这样非常有用的软件分支中实现这样的东西需要什么?

编辑:不确定这是否有用,但我找到了这个页面:https://obsproject.com/forum/threads/audio-sources.465/

特别是,我觉得这是有用的信息:

这与挂接Direct3D非常相似。挂接IAudioRenderClient接口,并截取GetBuffer以读取音频样本。

初级逆向工程时间!

此外,我不能给出一个明确的答案,但我可以引导你朝着正确的方向前进。

Discord的根目录中有一个名为modulesdiscord_hook的目录,在这里我们可以发现有一个JavaScript文件,名称为index.js,一个json文件,名称manifest.json,一个.node文件,名称discord_hook.node(它是编译/加密的,我不能读取(,一个包含.dlls和.exes的目录,它还生成了一个日志文件,名称叫hook.log

index.js似乎只是加载discord_hook.node并做一些对我们来说不重要的其他事情

在谷歌上搜索manifest.json,我来到了这里:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json

manifest.json文件是使用WebExtension API的每个扩展都必须包含的唯一文件。

.json文件中,我们发现它引用了.exes、.dlls、discord_hook.nodeindex.js及其本身。

前面提到的.node文件在很大程度上是人类无法读取的。

hook.log没有输出任何看似有用的东西,只是关于图形/视频共享的东西。

这让我们只能查看子目录中的exedll文件,我对asm一无所知,但我们可以查看这些二进制文件中留下的一些字符串。

我在DiscordHook.dll中发现了一段引用偏移量1266B4到偏移量126EA6音频的字符串(这可能而且几乎肯定会在未来版本的discord中发生变化(

以下是一些似乎值得在这里发布的字符串。

Audio buffer stopped, WASAPI capture stopping
Failed to get format of WASAPI audio buffer, not capturing, error code [%d]
Failed to get WASAPI audio client from render client, not capturing
Starting capture of WASAPI buffer with sample rate %d, depth %d, %d channels
Starting capture of Windows Sonic stream with downmix sample rate %d, depth %d, %d channels
ISpatialAudioObjectRenderStream::Stop
ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects
ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects
ISpatialAudioObject::GetBuffer
HookWasapi failed to load audioses.dll
WaveFormatFromRenderClient failed with error code [%d]
LoadWASAPIOffsets failed with error code [%d]
WASAPI module sizes don't match (expected: %lu, actual: %lu)
WASAPI offsets invalid (stop: %lu, getBuffer: %lu, releaseBuffer: %lu, clientOffset: %lu, endpointOffset: %lu)
WASAPI offsets out of bounds (size: %lu, stop: %lu, getBuffer: %lu, releaseBuffer: %lu)
IAudioClient::Stop
IAudioRenderClient::GetBuffer
IAudioRenderClient::ReleaseBuffer
HookWasapi: MH_ApplyQueued failed 0x%x

此外,我在谷歌上搜索了";钩子处理音频";并发现:https://ywjheart.wordpress.com/2017/02/26/audio-captureapihook-based-for-obs-studio/

它没有给出任何代码示例或下载,但它描述了一些关于做这件事的东西,但在OBS中。他们还在底部链接了他们用来记录它的东西。

祝你好运,我希望所有这些信息能在某种程度上有所帮助!

相关内容

  • 没有找到相关文章

最新更新