12

我想构建一个 Android 应用程序来从两个麦克风获取音频数据,将声音与内存中的一些混合,然后通过耳机播放声音。这需要实时完成。您能否请我参考一些教程或任何参考资料,以使用 Java eclipse 进行实时音频输入、混合和输出?

到目前为止,我能够录制声音,保存它,然后播放它,但是我找不到任何以这种方式与声音硬件进行实时接口的教程。

注意:一个麦克风通​​过分线器连接到安卓的 3.5 毫米耳机插孔,另一个通过 USB 端口连接。

谢谢!

4

1 回答 1

5

我在这里看到两个问题:

1) 通过 USB 输入音频。
音频输入可以使用 android 3.2+ 和 libusb 完成,但这并不容易(您需要从 libusb 获取 USB 描述符,自己解析它们并将正确的控制传输发送到设备等)。对于某些手机,您可以通过 USB 获得大约 5-10 毫秒的输入延迟。

2) 实时音频输出。这是 Android 中一个长期存在的问题,如果您想接近实时(使用原生音频输出),目前您几乎只能使用 Galaxy Nexus。但是,如果您掌握 USB,您也可以以更少的延迟进行输出。

我想如果你不厌其烦地让 USB 工作,你可以得到一个带立体声输入的 USB 音频设备。如果你在每个输入通道上连接了一个单声道麦克风,那么通过 USB 输出你会非常接近你的既定目标。您可能想尝试“USB Audio Tester”或“usbEffects”应用程序,看看目前有什么可能。

在编码混合和输出等方面,您可能希望一个线程读取每个单独的输入源并以小块写入队列(一次 100-1000 个样本)。然后有一个单独的线程读取队列并混合,将输出放置到另一个队列中,最后一个线程(如果不通过 USB 进行输出,可能在本机代码中)读取混合队列并进行输出。

以下链接http://code.google.com/p/loopmixer/具有处理音频本身的风格。

于 2012-12-13T10:34:52.573 回答