- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
遍历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.
\modules\discord_hook
的目录,在这里我们可以找到一个名为
index.js
的JavaScript文件,一个名为
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
The
manifest.json
file is the only file that every extension using WebExtension APIs must contain.
.json
文件中,我们发现它引用了
.exe
,
.dll
,
discord_hook.node
,
index.js
及其本身。
hook.log
不会输出任何看似有用的信息,而只是输出有关图形/视频共享的信息。
exe
和
dll
文件,我不了解
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 处理音频”,发现了这一点:
关于winapi - Discord如何挂接到特定进程的音频中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64309371/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!