【问题标题】:Android (Java) Real-time Audio Input (microphone AND USB) and OutputAndroid (Java) 实时音频输入(麦克风和 USB)和输出
【发布时间】:2012-11-14 12:36:52
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

  • 你意识到它永远不可能在real-time,因为它需要通过电线然后进行一些处理,对吧?
  • 此时,我愿意延迟几秒钟。
  • 对不起。我希望我能提供帮助,但这也超出了我的范围。我能做的就是点赞。顺便说一句,您使用的是android.media.AudioRecord 而不是android.media.MediaRecorder,对吧?
  • @kush,你对“实时”有一个好奇的理解。按照这个逻辑,没有什么是实时的。光线也需要相当长的时间才能到达您的眼睛。
  • 如果 Android 设备有立体声麦克风,您可以连接两个单声道麦克风,而不是一个 USB。

标签: java android audio real-time microphone


【解决方案1】:

我在这里看到两个问题:

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/ 具有处理音频本身的风格。

【讨论】:

  • 知道如何实现 USB 音频设备输入吗? AudioRecord 类似乎在选择输入方面受到限制。
  • @Gusdor 据我所知,没有内置的 Android API 支持。您必须使用 libusb 并通过 JNI 调用它。最难的部分是解析所有描述符并定时发送数据包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2014-02-16
  • 1970-01-01
相关资源
最近更新 更多