基于MK809/Android 4.1.1的音频捕获应用程序.没有内置麦克风,因此我尝试使用连接时在设置/声音/声音设备管理器/声音输入设备中正确检测为"USB音频设备"的USB设备.
什么是此设备的AudioSource值传递到AudioRecord构造函数(第一个参数).我在MediaRecorder.AudioSource中尝试了每一个,没有一个工作.我只对读取捕获缓冲区感兴趣,而不是保存到文件中.
回答我自己的问题.以下值确实有效:DEFAULT,MIC,CAMCORDER,也可能是其他值,因为它是唯一的输入设备.
我试图使用48000的采样率(适用于Windows)和AudioRecord创建失败:
ERROR/AudioRecord(1615):无法获取记录源1的音频输入ERROR/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配件的麦克风,MIC或者VOICE_RECOGNITION,用于USB音频录制的音频HAL支持的唯一采样率为8,16和48 kHz(尽管AudioFlinger能够重新采样到一定范围内的其他费率).