AudioRecorder.getMinBufferSize()返回-2

时间:2011-10-19 23:22:26

标签: android audio-recording

当我在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上运行它

2 个答案:

答案 0 :(得分:2)

查看AudioRecord.java的代码,这里真的只有3种可能性:

  • 您的channelConfig无效。
  • 您没有使用AudioFormat.ENCODING_PCM_16BIT。 (现在不支持8位。)
  • 硬件不支持您要求记录的内容。

来源: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