我想编写一个可以实时处理和播放麦克风数据的跨平台应用程序。想象一下,作为一个概念证明,一个聊天室,人们可以互相交谈并对他们的声音应用过滤器。 OpenAL适合这个吗?如果没有,有人可以提供替代方案吗?此外,如果任何人都可以提供或链接我一个简单的“hello world”程序,该程序从麦克风读取并将输出吐出来,那就太棒了。
谢谢!
答案 0 :(得分:3)
OpenAL可能不是很适合这个目的。我建议使用SDL(可能使用SDL_Mixer)或PortAudio。两者都是跨平台的,两者都相当容易使用。
要为此目的使用OpenAL,您必须轮询以查看在隐藏循环缓冲区中累积了多少样本。然后,当你决定准备好时,你会把它们拿出来。然后你应用你的过滤器。然后将过滤后的数据附加到缓冲区。然后将缓冲区排队到源上并告诉源播放(除非它已经播放)。在我看来,OpenAL的优势在于应用3D效果。它在实时过滤方面并不那么出色,但我希望如果你愿意在输出上接受更多的延迟,你可以使它工作。我更喜欢使用缓冲对象模型上的回调模型进行过滤。
编辑:我发布了一些代码可以完成此操作:OpenAL: How to create simple "Microphone Echo" programm?注释指出将进行处理的位置。
答案 1 :(得分:2)
OpenAL在技术上可以根据API使用它,但Apple的iOS实现不包括音频捕获功能。
在iOS上,您需要使用音频队列或音频单元进行录制。对于应用实时效果,音频单元是可行的方法,虽然比音频队列复杂得多。
答案 2 :(得分:-1)
Apple有两个样本(或更多)这样做。查看aurioTouch和SpeakHere。 aurioTouch可以录制麦克风输入并播放它,SpeakHere可以接收输入并录制它,你可以很容易地修改它来播放它。