Windows音频驱动程序与WASAPI



我现在正在阅读微软关于驱动程序和核心音频api的文档。目前,我仍然不知道该走哪条路才能实现我所需要的。我有一个音频应用程序,它是独立的,用C++中的JUCE框架编码。我需要构建一个Windows解决方案,该解决方案将捕获流向音频端点设备的音频流,并将其用作我的音频应用程序的输入。

  • 此流必须具有未更改的卷:始终为1.0(无论硬件卷是更改还是静音(
  • 我必须能够在不同的端点设备之间进行选择,例如,如果我有一个插入的外部声卡,我的音频应用程序应该能够拦截和复制流向该外部声卡的流,或者对流向内置扬声器的流执行同样的操作
  • 其想法是在输出流被硬件卷修改之前捕获它们,并在不更改输出路由和行为的情况下将它们的副本路由到我的应用程序

微软的文档提供得很好,但即使WASAPI提供了很多从音频端点设备捕获和流式传输的方法,我也不确定是否可以获得不变的音量,因为它总是可以捕获扬声器的确切声音。这就是为什么我不知道我是否可以直接在我的音频应用程序中实现一个功能,该功能将使用WASAPI获得我想要的流,或者我是否必须编写一个适当的音频驱动程序,该驱动程序将复制我想要的数据流,以便我的应用程序能够使用这些流。

我所指的文件:音频驱动程序设计指南核心音频API/WASAPI

感谢您的帮助,

最佳,

最大

音量控制有时用软件实现,有时用硬件实现。您可以调用IAudioEndpointVolume::QueryHardwareSupport来查看您正在使用的音频端点的音量控制是在硬件还是软件中实现的。

有时音频环回在软件中实现,有时在硬件中实现。没有API来判断哪一个。

如果音频环回在软件中实现,音量控制在硬件中实现,那么您将获得所需的数据。

如果音频环回在硬件中实现,或者音量控制在软件中实现,则您返回的音频数据已经应用了音量调整。

您的应用程序如何处理接收到的音频数据?音频环回数据的主要使用情况是回声消除,您通常希望应用音量。

最新更新