编辑:不确定这是否有用,但我找到了这个页面:https://obsproject.com/forum/threads/audio-sources.465/
特别是下面的内容似乎很有用:
它与挂钩Direct3D非常相似。您可以挂接IAudioRenderClient接口,并拦截GetBuffer以读取音频样本。
初学者的反向工程时间!
此外,我无法给出明确的答案,但我可以指导您方向。
Discord在其根目录中有一个名为\modules\discord_hook
的目录,在其中我们可以找到一个JavaScript文件,名为index.js
,一个名为manifest.json
的json文件,一个.node
文件,名为discord_hook.node
(已编译/加密,我无法阅读),一个带有.dll
和.exe
的目录,还会生成一个名为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
文件中,我们发现它引用了.exe
、.dll
、discord_hook.node
、index.js
和本身。
如先前所述,.node文件在很大程度上无法被人类阅读。
hook.log
似乎没有输出任何有用的内容,只有关于图形/视频共享的东西。
这让我们来看看此处子目录内的exe
和dll
文件,我不熟悉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中完成此操作的一些内容。他们还在底部链接了相关资源。
祝你好运,希望这些信息能够在某种程度上帮到你!