我应该使用线程编程来混合2个音频流吗

Should I use threading programming for mixing 2 audio stream?

本文关键字:混合 2个 音频流 编程 线程 我应该      更新时间:2023-10-16

我想写一个程序,从麦克风捕获音频流,同时将该流与播放的音频文件混合。

我在寻找库、api等……但我关心的是实现,我应该使用线程编程吗?我还不知道如何使用线程。

操作系统是windows,语言是c++或python。

感谢

我认为您将需要某种线程,以便使捕获和播放并行运行。

请注意,Python中的多线程受GIL的限制。在C++中,您可以使用类似Boost.Thread的东西。

一般来说,正确处理多线程很难,你应该慢慢来熟悉它。你最好的选择可能是找一本好书。

py2.6还附带了基于处理的线程,因此您不必只使用绿色线程

您可以使用SDL混合器。它启动了一个线程,所以你不必这么做。这里有很好的教程和参考页面。

您可以看看大胆的源AudioIO.cpp,它使用portmixer(也值得一看)。

您可以在portmixer中查看如何在窗口中启动音频io流。网上也有很多像这样的好教程。

尽管windows wave API为您启动了音频线程,但最佳做法是让另一个线程读取/解析/解码要混合的音频文件,并填充音频线程回调可访问的缓冲区。Portaudio/SDL/Open AL只是windows声音主机(MME/Direct sound)之上的一层,所以如果你使用其中一个,这仍然是正确的。

但是,如果你觉得很懒,或者只是想快速验证概念,那么可以从主线程中的音频文件中填充缓冲区。

关于麦克风输入,当您指定流细节时,您可以说出您想要的设备输入,这些输入作为int/foats数组提供给您,您可以直接将其发送到输出数组。在您的情况下,您希望混合(添加)音频文件。