2

我正在 Windows 上用 C++ 编写程序。我需要支持 Windows Vista+。

我想同时录制麦克风和扬声器。

我正在使用 WASAPI 并且可以分别录制麦克风和扬声器,但我希望只有一个流向我提供来自两个流的输入(例如,用于录制客户弹奏吉他以及他听到的音乐耳机),而不是以某种方式将两个缓冲区合并在一起(我想这会导致我出现时间问题)。

有没有办法做到这一点?

4

1 回答 1

0

我实际上正在研究一个可以做到这一点的库,合并来自多个设备的流。您可能想尝试一下:请参阅 xt-audio.com。如果您自己实现此功能,则需要考虑以下几点:

  • 如果您通过 WASAPI 环回接口捕获扬声器,则您在共享模式下运行,在这种情况下,延迟对于现场表演来说可能是不可接受的。如果可能的话,坚持独占模式并使用环回电缆或硬件环回设备(例如,老式的“立体声混音”设备等)。
  • 如果您要合并缓冲区,那么是的,您将遇到时间问题。这在同步独立设备时通常是不可避免的。使用会引入额外延迟的辅助中间缓冲区可以在很大程度上避免弹出/点击,但最终您将不得不填充/删除一些样本以保持流同步。
  • 不要为每个独立的流使用单独的线程。这将增加上下文切换,从而增加可实现的最小延迟。相反,将一个设备指定为主设备,等待该设备的事件被引发,然后从所有设备读取输入,无论它们是否“准备好”(这是丢弃/填充发挥作用)。

  • 一般来说,您可以从 WASAPI 独占模式获得非常不错的性能,甚至可以同时运行多个流。但是对于像现场表演这样重要的事情,您可能需要考虑使用带有 ASIO 驱动程序的专业音频接口,其中一切都只是在同一个时钟上打勾,或者至少在驱动程序级别处理同步。

于 2016-05-30T22:29:33.283 回答