我应该使用线程编程来混合2个音频流吗
Should I use threading programming for mixing 2 audio stream?
我想写一个程序,从麦克风捕获音频流,同时将该流与播放的音频文件混合。
我在寻找库、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数组提供给您,您可以直接将其发送到输出数组。在您的情况下,您希望混合(添加)音频文件。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- OpenGL 混合两种纹理总是会选择第一个纹理
- 第二个和第二个最终值在 C++ 中混合在二维数组中
- 混合 c++ 和汇编不能将多个参数从C++函数传递到程序集
- 在 c++ 中,两个日志行与 log4Cxx 混合在一起
- 混合多个 lex/yacc 组合
- 如何合并(混合)两个立体声MP3音频文件
- 混合共享/静态库时静态成员的多个副本
- 尝试混合两个PCM音频源
- 通过两个交替元素来混合两个数组
- 我的C++DLL返回两个顺序调用混合的数据
- 将两个#定义混合成一个单词
- Boost::asio::async_write混合来自两个消息的数据(bug)
- 在c++中逐行打印两个字符串的混合
- 混合两个粒子系统的颜色
- 我应该使用线程编程来混合2个音频流吗
- Photoshop如何将两个图像混合在一起
- 如何在c++程序中用pgm格式混合/合并两个图像
- OpenAL:如何同时播放多个声音并混合它们
- 如何使用LibSoX混合两个wav文件