记录渲染和记录设备 我在C++上编写了一个Windows程序。我需要支持Windows Vista+

记录渲染和记录设备 我在C++上编写了一个Windows程序。我需要支持Windows Vista+,c++,wasapi,C++,Wasapi,我想同时录制麦克风和扬声器 我使用的是WASAPI,可以分别录制麦克风和扬声器,但我希望只有一个流向我提供来自两个流的输入(例如,用于录制客户在他耳机上听到的音乐中弹奏吉他),而不是以某种方式将两个缓冲区合并在一起(我想这会让我产生时间问题) 有什么方法可以做到这一点吗?我实际上正在开发一个库,它可以做到这一点,可以合并来自多个设备的流。您可能想尝试一下:请访问xt-audio.com。如果您自己实现此功能,请考虑以下几点: 如果您是通过WASAPI环回接口捕获扬声器的,您是在共享模式下操作的

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

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


有什么方法可以做到这一点吗?

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

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

  • 一般来说,你可以从WASAPI独占模式中获得非常不错的性能,甚至可以同时运行多个流。但是对于一些与现场性能一样重要的东西,你可能需要考虑一个与ASIO驱动程序的专业音频接口,在那里所有的东西都会在同一个时钟上滴答作响,或者同步至少在驱动级别上被处理。/p>
如果您正在处理实时音频,您需要确保捕获线程具有适当的优先级-如果您拥有该优先级并正确调用API,则计时应该不会有问题。