2013-04-29 4 views
1

Я пытаюсь создать приложение, в котором есть функция записи. Я хочу, чтобы пользователь мог выбирать качество записи, одним из вариантов является запись AAC. Я использую код ниже, но я продолжаю получать ошибки при настройке audioSamplingRate .. любые идеи?Mediarecorder setParameter failed (setAudioSamplingRate)

mediaRecorder = new MediaRecorder(); 
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
        mediaRecorder.setAudioSamplingRate(96000); 
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 

и ошибка

04-29 10:32:17.477: E/MediaRecorder(18750): setParameters(audio-param-sampling-rate=96000) failed: -22 
04-29 10:32:17.477: E/com.test.com.AudioRecorder(18750): setParameter failed. 
04-29 10:32:17.477: E/com.test.com.AudioRecorder(18750): prepare() method called on illegal state 
+0

96 кГц - очень высокая частота дискретизации и не гарантируется. Я предлагаю вам попробовать общую частоту дискретизации <= 48 кГц (например, 48000, 44100, 22050, 16000, 8000). – Michael

+0

Я попытался установить его на 16000, не возвращает исходную ошибку, но еще одну ошибку .. 04-29 12: 15: 09.989: E/MediaRecorder (23954): не удалось выполнить: -2147483648 04-29 12: 15: 09.989: E/com.test.com.AudioRecorder (23954): подготовка завершилась неудачно. –

ответ

0

Каждый аудио частота дискретизации не поддерживается в устройствах. поэтому, если он не поддерживается, он выдаст ошибку или обрезает внутренне, чтобы сделать его подходящим. Для качества вы можете установить битрейт кодирования звука с частотой дискретизации.44100. Частота дискретизации поддерживается всеми устройствами Android в соответствии с его документацией на аудиозапись. Вы можете использовать скорость передачи битов в соответствии с вашей формуле need.This может помочь вам

Bit Rate = (частота дискретизации) × (битовая глубина) × (число каналов)

битовую глубину, как правило, 8 в андроид устройств.