Loopback Recording
libai 发布于 2022-01-22

在Loopback模式下,WASAPI的客户端可以捕获渲染端点设备正在播放的音频流。要以Loopback模式打开流,客户端必须:

  • 获取渲染终结点设备的IMMDevice接口。
  • 在渲染端点设备上以环回模式初始化捕获流

完成这些步骤后,客户端可以调用IAudioClient::GetService方法,以在呈现端点设备上获取IAudioCaptureClient接口。WASAPI提供环回模式主要是为了支持声学回波消除(AEC)。但是,其他类型的音频应用程序可能会发现环回模式对于捕获音频引擎正在播放的系统混音非常有用。

在捕获流的代码示例中,可以轻松修改RecordAudioStream函数以配置环回模式捕获流。所需的修改包括:

  • 在对IMMDeviceEnumerator::GetDefaultAudioEndpoint方法的调用中,将第一个参数(数据流)从eCapture更改为eRender。
  • 在对IAudioClient::Initialize方法的调用中,将第二个参数(StreamFlags)的值从0更改为AUDCLNT_StreamFlags_LOOPBACK。

客户端只能为共享模式流(AUDCLNT_SHAREMODE_shared)启用环回模式。独占模式流不能在环回模式下运行。

WASAPI系统模块在软件中实现环回模式。在环回模式下,WASAPI将音频引擎的输出流复制到应用程序的捕获缓冲区中。相比之下,一些硬件供应商在其音频适配器中实现环回设备。虽然硬件环回设备在操作上与WASAPI环回模式类似,但它们可能更难使用。

硬件环回设备对于音频应用有以下缺点:

  • 并非所有音频适配器都有环回设备。因此,依赖它们的应用程序不会在所有系统上都工作。
  • 在应用程序可以从环回设备记录之前,用户必须识别环回设备并启用它以供使用。

不同的供应商为其硬件环回设备分配不同的名称。以下名称为示例:

 

  • Stereo Mix
  • Waveout 混合
  • 混合输出
  • 你听到的

缺少标准化名称可能会导致用户难以在设备名称列表中识别环回设备。

 

硬件环回设备是一种捕获设备。因此,如果适配器支持环回设备,则音频应用程序可以从该设备进行录制,其方式与从任何其他捕获设备进行录制的方式相同。

例如,如果选择硬件环回设备作为默认捕获设备,则可以在捕获流时使用代码示例中的RecordAudioStream函数(无需修改)从设备捕获流。(您还可以使用传统音频API,如Windows multimedia waveInXxx函数,从设备捕获流。)

 

如果音频适配器包含硬件环回设备,则可以使用Windows多媒体控制面板Mmsys。cpl,将设备指定为默认捕获设备。步骤如下:

 

  1. 要运行 Mmsys.cpl, 打开一个 Command Prompt 窗口并输入下面命令:

    control mmsys.cpl,,1
    

     

    或者,您可以运行Mmsys。通过右键单击位于任务栏右侧的通知区域中的扬声器图标,然后选择录制设备,实现cpl。

  2. 在Mmsys之后。cpl窗口打开,右键单击记录设备列表中的任意位置,并验证是否选中了“显示禁用的设备”选项。(否则,如果环回设备被禁用,它将不会出现在列表中。)

  3. 浏览记录设备列表以查找环回设备(如果存在)。如果环回设备已禁用,请通过右键单击该设备并单击“启用”来启用它。

  4. 最后,要选择环回设备作为默认捕获设备,请右键单击该设备,然后单击设置为默认设备。

WASAPI环回记录不使用硬件环回设备。WASAPI支持环回录制,无论音频硬件是否包含环回设备,或者用户是否启用了该设备。

 

Windows Vista提供数字版权管理(DRM)。内容提供商依靠数字版权管理保护其专有音乐或其他内容不受未经授权的复制和其他非法使用。WASAPI不允许对包含DRM保护内容的数字流进行环回记录。类似地,可信音频驱动程序不允许环回设备捕获包含受保护内容的数字流。Windows Vista只允许受信任的驱动程序播放受保护的内容。有关受信任的驱动程序和DRM的更多信息,请参阅Windows DDK文档。

李白
关注 私信
文章
12
关注
0
粉丝
0