5

I would like to write a cross-platform application that can process and play back microphone data in real time. Imagine as a proof of concept a chat room where people can talk to each other and apply filters to their voices. Is OpenAL appropriate for this? If not, can someone provide an alternative? Additionally, if anyone can provide or link me to a simple "hello world" program that reads from the microphone and spits the output back out, that would be awesome.

Thanks!

4

3 回答 3

3

OpenAL 可能不适用于此目的。我会推荐使用 SDL(可能使用 SDL_Mixer)或 PortAudio。两者都是跨平台的,并且都相当容易使用。

要将 OpenAL 用于此目的,您必须轮询以查看隐藏的循环缓冲区中累积了多少样本。然后,当你决定准备好时,你把它们拿出来。然后你应用你的过滤器。然后将过滤后的数据附加到缓冲区。然后将缓冲区排队到源上并告诉源播放(除非它已经在播放)。在我看来,OpenAL 的优势在于应用 3D 效果。它在实时过滤方面并没有那么好,尽管我希望如果你愿意接受更多的输出延迟,你可以让它工作。我更喜欢回调模型而不是缓冲区对象模型进行过滤。


编辑:我在以下位置发布了一些完全可以做到这一点的代码:OpenAL:如何创建简单的“麦克风回声”程序? 一条评论指出了将处理放在哪里。

于 2011-03-31T19:49:38.430 回答
2

根据 API,OpenAL 在技术上可以做到这一点,但 Apple 的 iOS 实现不包括音频捕获功能。

在 iOS 上,您需要使用音频队列或音频单元进行录制。对于应用实时效果,音频单元是要走的路,虽然比音频队列复杂得多。

于 2011-03-31T16:23:26.887 回答
-1

苹果有两个(或更多)样本可以做到这一点。查看 aurioTouch 和 SpeakHere。aurioTouch 可以接收麦克风输入并播放它,SpeakHere 可以接收输入并记录它,你可以很容易地修改它来播放它。

于 2009-10-24T07:44:42.493 回答