gpt4 book ai didi

c++ - 记录渲染和记录设备

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:31 25 4
gpt4 key购买 nike

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

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

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

有办法吗?

最佳答案

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

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

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

关于c++ - 记录渲染和记录设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33614113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com