当我在AudioRecorder类中运行getMinBufferSize()方法时,该方法始终返回-2。即使我更改采样率,编码方法和通道编号。我已经尝试了所有可能的组合,但它仍然返回-2。我知道RecordAudio有权限。如果我注释掉getMinBufferSize的行,并制作minBuffer 4096,录音机将初始化并录制。这仅在我将采样率设置为8000并且录音听起来像垃圾时才有效。如果我完全改变采样率,程序将强行关闭。
编辑:
bufferSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_DEFAULT,ENCODING_PCM_16BIT);
我在模拟器,Droid Eris,Droid 1和Droid 2 Global上运行它
答案 0 :(得分:2)
查看AudioRecord.java的代码,这里真的只有3种可能性:
来源:http://google.com/codesearch/p?hl=en#uX1GffpyOZk/media/java/android/media/AudioRecord.java
另请参阅:Why does AudioRecord.getMinBufferSize return ERROR_BAD_VALUE (-2)?
答案 1 :(得分:2)
尝试使用这些参数,因为这些是唯一可以保证在所有Android设备上运行的参数集:
AudioRecord.getMinBufferSize(
44100,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT)
如果44.1KHz太大,我使用16000的采样率从未遇到过问题。另外,请记住,这是最小录制大小。根据您的应用程序,在使用此值初始化录音机之前,将它乘以2或3可能是个好主意。
如果您仍然遇到问题,请确保初始化AudioRecord
对象的音频来源为MediaRecorder.AudioSource.MIC
。