记录渲染和录制设备

时间:2015-11-09 16:52:45

标签: c++ wasapi

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

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

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

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

我实际上正在开发一个可以完全实现这一目标的库,从多个设备合并流。您可能想尝试一下:请参阅xt-audio.com。如果您自己实现这一点,请考虑以下事项:

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

    < / LI>
  • 通常,您可以从WASAPI独占模式获得非常不错的性能,甚至可以同时运行多个流。但对于像现场性能一样重要的东西,您可能需要考虑使用ASIO驱动程序的专业音频接口,其中所有内容都会在同一时钟内完成,或者至少在驱动程序级别处理同步。