Почему AudioRecord.getMinBufferSize возвращает ERROR_BAD_VALUE (-2)? - PullRequest
10 голосов
/ 24 января 2011

Я тестирую это на Samsung Galaxy S i9000.

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

Возвращает -2 ERROR_BAD_VALUE.

Собственная частота дискретизации составляет 44100 Гц, как возвращается

AudioTrack.getNativeOutputSampleRate (AudioManager.STREAM_SYSTEM).

Я попытался установить sampleRate на 1000, 8000, 22100 и 44100. Я также попытался изменить AudioFormat.CHANNEL_IN_MONO на AudioFormat.CHANNEL_CONFIGURATION_MONO. Я также пытался STEREO (оба IN_STEREO и CONFIGURATION_STEREO). Я также попробовал 16-битное кодирование вместо 8-битного.

Обновление: мой манифест имеет AUDIO_RECORD в качестве разрешения.

Я продолжаю получать -2 в результате. Почему это происходит?

Ответы [ 2 ]

17 голосов
/ 24 января 2011

Из исходного файла платформы 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-битный или ничего. : \

0 голосов
/ 08 февраля 2012

В эмуляторе всегда будет возвращаться -2. С тем же кодом все будет нормально на реальном мобильном телефоне.

...