Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android(Java)实时音频输入(麦克风和USB)和输出_Java_Android_Audio_Real Time_Microphone - Fatal编程技术网

Android(Java)实时音频输入(麦克风和USB)和输出

Android(Java)实时音频输入(麦克风和USB)和输出,java,android,audio,real-time,microphone,Java,Android,Audio,Real Time,Microphone,我想构建一个Android应用程序,从两个麦克风获取音频数据,将声音与内存中的一些声音混合,然后通过耳机播放声音。这需要实时完成。您能让我参考一些教程或任何参考资料,以了解Java eclipse的实时音频输入、混音和输出吗 到目前为止,我能够录制声音,保存它,然后播放它,但我找不到任何教程,以这种方式与声音硬件进行实时接口 注意:一个麦克风通过分路器连接到Android的3.5毫米耳机插孔,另一个通过USB端口连接 谢谢 我在这里看到两个问题: 1) 通过USB进行音频输入。 音频输入可以使用

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

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

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


谢谢

我在这里看到两个问题:

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

2) 音频输出实时。 这在安卓系统中是一个长期存在的问题,如果你想实现实时(使用本机音频输出),目前你几乎只能使用Galaxy Nexus。然而,如果你掌握了USB,你也可以以更少的延迟输出

我想,如果你不辞辛劳地让USB工作,你可以得到一个带立体声的USB音频设备。如果您将一个单声道麦克风连接到每个输入通道,然后通过USB输出,您将非常接近您的既定目标。您可能想尝试“USB音频测试仪”或“USBEFECTS”应用程序,看看当前可能的情况

就混合和输出等的编码而言,您可能需要一个线程读取每个单独的输入源,并以小块的形式写入队列(一次100-1000个样本)。然后让一个单独的线程读取队列并进行混合,将输出放在另一个队列上,最后是一个线程(如果没有通过USB进行输出,则可能是本机代码)来读取混合队列并进行输出


下面的链接有一种处理音频本身的风格。

您意识到它永远不可能是实时的,因为它需要通过电线然后进行一些处理,对吗?在这一点上,我愿意延迟几秒钟。对不起。我希望我能帮忙,但我也无能为力。我所能做的就是投票。顺便说一句,您使用的是
android.media.AudioRecord
,而不是
android.media.media recorder
,对吗?@kush,您对“实时”有着奇怪的理解。按照这种逻辑,没有什么是实时的。此外,光线需要相当长的时间才能到达你的眼睛。如果Android设备内置立体声麦克风,你可以连接两个单声道麦克风,而不是一个USB。你知道如何实现USB音频设备输入吗?AudioRecord类似乎仅限于选择输入。@Gusdor据我所知,它没有内置的Android API支持。您必须使用libusb并通过JNI调用它。硬的部分是解析所有描述符并对数据包计时。