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

时间:2011-06-24 12:15:16

标签: c++ python windows multithreading audio

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

我看起来像库,api等等......但是我关心的是实现,我应该使用线程编程吗?我还不知道如何使用线程。

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

感谢

4 个答案:

答案 0 :(得分:1)

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

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

一般来说,获得正确的多线程很难,你应该花时间熟悉它。你最好的选择可能就是找一本好书。

答案 1 :(得分:0)

py2.6也带有基于处理的线程,所以你没有todo只是绿线

答案 2 :(得分:0)

您可以使用SDL mixer。它启动一个线程,所以你不必这样做。 有很好的教程和参考页面。

答案 3 :(得分:0)

你可以看一下使用portmixer的audacity源AudioIO.cpp(也值得一看)。

您可以查看portmixer以了解如何在Windows中启动音频io流。还有很多很好的在线教程,如this one

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

但是如果你感觉很懒或者只是想要一个快速的概念证明,就可以从主线程中的音频文件中填充缓冲区。

关于麦克风输入,当您指定流详细信息时,您可以说出所需的设备输入,并将这些输入作为一个整数/浮点数组提供给您,您可以将其直接发送到输出数组。在您的情况下,您想要混合(添加)音频文件。