为什么AudioRecord.getMinBufferSize返回ERROR_BAD_VALUE(-2)?

时间:2011-01-24 12:09:18

标签: android audio-recording

我在三星Galaxy S i9000上进行测试。

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_MONO更改为AudioFormat.CHANNEL_CONFIGURATION_MONO。我还尝试了STEREOIN_STEREOCONFIGURATION_STEREO)。我也尝试过16位编码而不是8位。

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

结果我一直得-2。为什么会这样?

2 个答案:

答案 0 :(得分: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 :(得分:0)

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