我正在 Windows 上用 C++ 编写程序。我需要支持 Windows Vista+。
我想同时录制麦克风和扬声器。
我正在使用 WASAPI 并且可以分别录制麦克风和扬声器,但我希望只有一个流向我提供来自两个流的输入(例如,用于录制客户弹奏吉他以及他听到的音乐耳机),而不是以某种方式将两个缓冲区合并在一起(我想这会导致我出现时间问题)。
有没有办法做到这一点?
我实际上正在研究一个可以做到这一点的库,合并来自多个设备的流。您可能想尝试一下:请参阅 xt-audio.com。如果您自己实现此功能,则需要考虑以下几点:
不要为每个独立的流使用单独的线程。这将增加上下文切换,从而增加可实现的最小延迟。相反,将一个设备指定为主设备,等待该设备的事件被引发,然后从所有设备读取输入,无论它们是否“准备好”(这是丢弃/填充发挥作用)。
一般来说,您可以从 WASAPI 独占模式获得非常不错的性能,甚至可以同时运行多个流。但是对于像现场表演这样重要的事情,您可能需要考虑使用带有 ASIO 驱动程序的专业音频接口,其中一切都只是在同一个时钟上打勾,或者至少在驱动程序级别处理同步。