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

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

问题描述:

我想编写一个从麦克风捕获音频流的程序,同时将此流与播放的音频文件混合。我应该使用线程编程来混合2音频流吗?

我很喜欢图书馆,API等..但是我关心的是实施,我应该使用线程编程吗?我不知道如何使用线程。

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

感谢

+1

使用插孔;或者使用arec + sox – sehe

+0

考虑使用OpenAL或SDL。两者都应该能够做你想做的。他们都使用线程,但你不必在你的图层。 –

我想你会需要某种线程的,为了使拍摄和播放流畅运行并排侧。

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

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

py2.6带有处理基于线程的,所以你不必待办事项只是绿色线程

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

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

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

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

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

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