根植于 MK809/Android 4.1.1 的音频捕获应用程序。没有内置麦克风,所以我尝试使用 USB 麦克风,连接时在设置/声音/声音设备管理器/声音输入设备中正确检测为“USB 音频设备” 。
要传递给 AudioRecord 构造函数的这个设备的 AudioSource 值是多少(第一个参数)。我尝试了 MediaRecorder.AudioSource 中的每一个,都没有奏效。我只对读取捕获缓冲区感兴趣,而不是保存到文件中。
回答我自己的问题。以下值确实有效:DEFAULT、MIC、CAMCORDER,可能还有其他值,因为它是唯一的输入设备。
我试图使用 48000 的采样率(适用于 Windows)并且 AudioRecord 创建失败:
错误/AudioRecord(1615):无法获取记录源 1 的音频输入错误/AudioRecord-JNI(1615):创建 AudioRecord 实例时出错:初始化检查失败。ERROR/AudioRecord-Java(1615): [android.media.AudioRecord] 初始化本机 AudioRecord 对象时出现错误代码 -20。
考虑到使用相同的 agruments 集调用 getMinBufferSize() 不会返回预期的错误,这有点误导信息。我认为这是设备的有效采样率。将其设置为 44100(保证)解决了这个问题。
USB 音频输入设备可以在 Android 上运行,至少在 Jelly Bean 上。希望这可以帮助某人。
FWIW,这是特定于实现的(不同平台供应商和 OEM 之间可能会有所不同)。
在我使用过的设备上,如果 AudioSource 是或DEFAULT
,则会选择 USB 附件的麦克风,并且音频 HAL 中支持的 USB 音频录制的唯一采样率是 8、16 和 48 kHz(尽管 AudioFlinger 能够重新采样到一定范围内的其他速率)。MIC
VOICE_RECOGNITION