当直接渲染到WASAPI时,两个流中的一个流没有音频输出



我已经被这个问题困扰了好几个星期了,谷歌也帮不了我,所以希望这里的一些人能帮助我。

我正在用C++编程一个软件混音器,从网络和Windows麦克风获取音频数据包,将它们作为PCM混合在一起,然后通过网络将它们发送回扬声器/USB耳机。这是有效的。我有一个使用PortAudio库处理Windows界面的工作设置。然而,我的主管认为这个软件和我们的系统之间的延迟可以减少,所以为了降低延迟(并更好地处理USB耳机断开连接(,我现在正在重写Windows接口层,直接使用WASAPI。我可以消除一些缓冲区和回调,理论上,如果对高层来说仍然不够快,可以使用超低延迟接口。

我现在只有一部分在工作,而这部分正是我在这里的致命之处。我们的系统将扬声器和耳机作为三个独立的单声道音频流。扬声器为单声道,耳机由两个流组合而成立体声。我将其作为两个流输出到窗口,一个流用于用户选择的扬声器设备,另一个流是用户选择的耳机设备。为了测试,它们都输出到我的系统上默认的通用立体声混音。

我可以很好地听到扬声器的声音,但无论我尝试什么,我都听不到耳机的声音。它们都使用相同的代码路径,都通过WMF重采样器以Windows想要的采样率转换为2声道音频。但我能听到扬声器的声音,但听不到耳机的声音。

这不是一个独占模式问题:我在所有流上都使用共享模式,我甚至专门尝试将流减少到只有耳机,以防其中一个踩踏另一个或其他什么,但耳机仍然没有音频输出。

这不是上游的混音器问题,因为我还没有修改任何使用PortAudio流时的代码。我可以看到音频通过混合器并通过调试可视化工具输出。

当系统回叫请求音频时,我可以看到数据进入我从系统获得的缓冲区。我应该听到的东西,甚至是静态的,但我一无所获。(有一次,我完全绕过环形缓冲区,在回调中直接将随机数放入缓冲区,但仍然没有声音。(

我在这里做错了什么?Windows本身似乎是个问题,但我没有Windows API方面的专业知识,我显然是公司里最擅长这方面的人。我甚至还没有弄清楚为什么麦克风输入不起作用,我已经被这个问题困扰了好几个星期了。如果有人有任何建议,我们将不胜感激。

检查重新采样的流:将立体声流输出到扬声器,将单声道流输出到手机。

使用IAudioClient::IsFormatSupported检查手机支持的格式。

使用mp3文件验证您的代码。使用两个媒体播放器在不同的设备上同时播放不同的文件。

相关内容

最新更新