gpt4 book ai didi

winapi - Discord如何挂接到特定进程的音频中?

转载 作者:行者123 更新时间:2023-12-03 14:44:40 29 4
gpt4 key购买 nike

遍历Google搜索结果,没有广泛的方法来捕获Microsoft Windows上特定应用程序的音频,至少无需采取变通方法,例如将音频从一个进程发送到单独的虚拟音频回送设备(但是会导致除非您使用硬件回送播放设备或通过主输出“收听”模拟输入,否则无法听到声音。
这些解决方法比较笨拙,需要针对每个特定应用程序进行配置,并且软件经常会行为不当,如果在执行过程中更改了它们的输出设备,它们也将无法成功发出声音或停止工作。同时,启动Discord“实时流” session 可让您轻松而无故障地与VoIP组调用共享单个应用程序的声音。来自其他应用程序的声音被完全删除。从音频设备来看,似乎没有虚拟环回路由发生,并且客户端的音频播放中断绝对为零。该功能在macOS或Linux版本的软件上不可用,仅在Windows上可用。因此,可以在Win32中捕获来自特定过程的声音,但是为什么没有其他人这样做呢?例如,要在诸如OBS或Audacity之类的功能非常有用的软件分支中实现类似的功能,该怎么办?

最佳答案

编辑:不确定这是否是有用的,但我发现此页面:https://obsproject.com/forum/threads/audio-sources.465/
特别是,这给我留下了有用的信息:

It's quite similar to hooking Direct3D. You hook the IAudioRenderClient interface, and intercept GetBuffer to read the audio samples.


初学者的逆向工程时间!
此外,我无法给出确切的答案,但是我可以引导您朝着正确的方向前进。
Discord在其根目录中有一个名为 \modules\discord_hook的目录,在这里我们可以找到一个名为 index.js的JavaScript文件,一个名为 manifest.json的json文件,一个名为 .nodediscord_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

The manifest.json file is the only file that every extension using WebExtension APIs must contain.


.json文件中,我们发现它引用了 .exe.dlldiscord_hook.nodeindex.js及其本身。
如前所述,.node文件在大多数情况下是人类不可读的。 hook.log不会输出任何看似有用的信息,而只是输出有关图形/视频共享的信息。
这使我们可以在这里查看子目录中的 exedll文件,我不了解 asm,但是我们可以查看这些二进制文件中剩余的一些字符串。
我在 DiscordHook.dll中找到了一段引用偏移量1266B4处的音频到偏移量126EA6处的字符串(这在将来的不和谐版本中可能并且几乎肯定会发生变化)
以下是一些似乎值得在此处发布的字符串。
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
另外,我在Google上搜索了“ Hook 处理音频”,发现了这一点:
https://ywjheart.wordpress.com/2017/02/26/audio-captureapihook-based-for-obs-studio/
它没有提供任何代码示例或下载,但是它描述了一些特定的事情,但是在OBS中。他们还在底部链接了用于记录的内容。
祝您好运,我希望所有这些信息都能以某种方式有所帮助!

关于winapi - Discord如何挂接到特定进程的音频中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64309371/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com