我想构建一个 Android 应用程序以从两个麦克风获取音频数据,将声音与内存中的一些混合,然后通过耳机播放声音。这需要实时完成。您能否向我推荐一些教程或任何引用资料,以使用 Java eclipse 进行实时音频输入、混合和输出?
到目前为止,我能够录制、保存并播放声音,但我找不到任何以这种方式实时连接声音硬件的教程。
注意:一个麦克风通过分离器连接到Android 的3.5 毫米耳机插孔,另一个通过USB 端口连接。
谢谢!
最佳答案
我在这里看到两个问题:
1) USB 音频输入。音频输入可以使用 android 3.2+ 和 libusb 完成,但这并不容易(您需要从 libusb 获取 USB 描述符,自己解析它们并将正确的控制传输发送到设备等)。对于某些手机,您可以通过 USB 获得大约 5-10 毫秒的输入延迟。
2) 实时音频输出。 这是 Android 中长期存在的问题,如果您想实时处理(使用 native 音频输出),目前您几乎只能使用 Galaxy Nexus。但是,如果您掌握了 USB,您也可以以更短的延迟进行输出。
我想如果您不厌其烦地让 USB 工作,您可以获得一个带立体声输入的 USB 音频设备。如果您将一个单声道麦克风连接到每个输入 channel ,然后通过 USB 输出,您将非常接近你的既定目标。您可能想尝试“USB Audio Tester”或“usbEffects”应用程序,看看目前有什么可能。
在编码混合和输出等方面,您可能需要一个线程读取每个单独的输入源并以小块(一次 100-1000 个样本)写入队列。然后有一个单独的线程读取队列并混合,将输出放入另一个队列,最后一个线程(如果不通过 USB 进行输出,则可能在 native 代码中)读取混合队列并进行输出。
以下链接http://code.google.com/p/loopmixer/具有处理音频本身的风格。
关于java - Android (Java) 实时音频输入(麦克风和 USB)和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574942/