2011-01-24 46 views
9

我正在三星Galaxy S i9000上进行测试。为什么AudioRecord.getMinBufferSize返回ERROR_BAD_VALUE(-2)?

int sampleRate = 44100; 
int bufferSize = AudioRecord.getMinBufferSize(sampleRate, 
    AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT); 

它返回-2 ERROR_BAD_VALUE

天然采样速率为44100Hz,通过

AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_SYSTEM)返回。

我试图SAMPLERATE设置为1000,8000,22100和44100。我也试图改变AudioFormat.CHANNEL_IN_MONOAudioFormat.CHANNEL_CONFIGURATION_MONO。我也试过STEREO(均为IN_STEREO和​​)。我也试过16位编码而不是8位。

更新:我的清单有AUDIO_RECORD作为权限。

我一直得到-2作为结果。这是为什么发生?

+0

嗨,这是否得到解决,或任何见解?谢谢。 – 2015-09-21 09:39:28

回答

17

从平台源文件AudioRecord.java

static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) { 
    ... 
    // PCM_8BIT is not supported at the moment 
    if (audioFormat != AudioFormat.ENCODING_PCM_16BIT) { 
     loge("getMinBufferSize(): Invalid audio format."); 
     return AudioRecord.ERROR_BAD_VALUE; 
    } 
    ... 
} 

看起来像你的选择是16位还是什么都没有。 :\

+1

+1。他说他也尝试了16位,所以该方法中唯一可以从getMinBufferSize返回ERROR_BAD_VALUE的地方是第472-475行。 – McStretch 2011-01-24 13:12:26

+0

感谢您的信息。 McStretch是正确的,但我也试过ENCODING_PCM_16BIT。 – Tom 2011-01-24 13:15:20

0

在模拟器中,它将始终返回-2。使用相同的代码,它会在真正的移动设备上运行。

相关问题