【问题标题】:Capture audio of a single application on Windows 7在 Windows 7 上捕获单个应用程序的音频
【发布时间】:2011-08-30 09:13:33
【问题描述】:

有没有办法捕获仅由单个应用程序而不是整个系统输出的音频?使用WASAPI,我可以捕获the entire system audio,但我希望只捕获来自一个应用程序的音频(会有很多应用程序,所有应用程序都同时播放音频。)

【问题讨论】:

  • 嗨。我对捕获整个系统音频很感兴趣。你是怎么做到的?一些指针?

标签: c++ windows audio wasapi


【解决方案1】:

Detours 用于挂钩。使用lib hookIAudioRenderClient接口,包括GetBufferReleaseBuffer,从缓冲区中读取数据。

【讨论】:

  • 您是如何使用 Detours 挂钩 IAudioRenderClient 的?我尝试通过 IMMDeviceEnumerator、IMMDevice::Activate 和 IAudioClient::GetService。但不幸的是 IMMDevice::Activate 似乎没有被调用。
【解决方案2】:

根据应用程序用于播放音频的 API,您可以编写一个 AppInit DLL 来包装内置的 waveIn\waveOut 函数并传递音频数据。我知道这适用于 waveIn\waveOut 函数,但不确定 Windows 7 上还有哪些其他音频播放接口以及它们是否与 AppInit 技巧兼容。

【讨论】:

  • 不要使用 AppInit,只需启动暂停的进程并注入您的 DLL - 无论哪种方式都是 hacky,但至少您不会影响机器上的每个应用程序。
  • 是的,但是通过单击图标很难开始暂停/注入:AppInit 选项工作得相当好。如果你想非常小心,你可以对可执行文件进行图像劫持,这将与挂起/注入技巧兼容:只是没有任何经验。
  • 请不要将 AppInit 用于任何事情,您几乎肯定会导致其他应用程序崩溃并使您的客户的生活变得不那么美好。您可以使用调试器 API 暂停进程,注入您的 DLL,然后点击 go。
  • 我们必须同意不同意这一点:它是侵入性的,但就像所有强大的工具一样,只要小心处理就会很有价值。
  • 这不是意见 - AppInit DLL 导致问题,保证。您唯一的希望是您的应用不够受欢迎,以至于用户碰巧点击了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多