如何使用WASAPI在c ++ UWP应用上捕获音频?

时间:2018-11-30 08:38:14

标签: c++ audio uwp audio-recording wasapi

对于我的问题,我似乎在互联网上找不到任何教程。
所有the simple guide都不适合UWP。

例如, 要使用WASAPI,请执行以下步骤

  • 枚举设备
  • 捕获音频
  • 播放(渲染)音频

但是枚举步骤是,客户端必须调用CoCreateInstance。但是据我了解,此功能is not support in UWP。另外,我跟随this code时在第30行失败了。

因此,我尝试理解这一点,C++ UWP using WASAPI,但是我找不到任何枚举部分,因此该项目对我来说非常复杂。 它包含许多其他文件(DeviceState.h,common.h)
我无法提取代码来创建自己的应用程序。

我的问题是如何使用WASAPI在c ++ UWP应用上捕获音频?

如果这个问题太难了,我将把问题改为如何在c ++ UWP应用程序中枚举音频设备?。

使用WASAPI的原因是因为我想访问存储在缓冲区中的数据。

编辑:
用于枚举。 https://github.com/Microsoft/Windows-universal-samples/blob/7c7832e1f144e4fc836603fd70e1352024a5fe1a/Samples/WindowsAudioSession/cpp/Scenario1.xaml.cpp#L85

1 个答案:

答案 0 :(得分:1)

是的,您可以使用WASAPI在UWP中进行音频捕获,而这正是您引用的样本(https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/WindowsAudioSession)中所做的。

对于枚举,主要功能是DeviceInformation::FindAllAsync,带有选择器MediaDevice::GetAudioCaptureSelector,它将使您列出捕获设备。

对于流捕获,您需要的主要功能是 ActivateAudioInterfaceAsync,如果您只需要使用默认设备,它将允许您从设备ID(特定设备)或设备类(渲染或捕获)创建IAudioClient。 有了IAudioClient之后,您就可以使用它来获取IAudioClientCapture,基本上就是您在示例中看到的东西。