AudioRecorder.getMinBufferSize () возвращает -2 - PullRequest
2 голосов
/ 20 октября 2011

Когда я запускаю метод getMinBufferSize () в классе AudioRecorder, метод всегда возвращает -2.Даже когда я меняю частоту дискретизации, метод кодирования и номер канала.Я попробовал каждую возможную комбинацию, но она все еще возвращает -2.Я знаю, что разрешения есть для RecordAudio.Если я закомментирую строку для getMinBufferSize и сделаю minBuffer 4096, аудиорекордер будет инициализирован и записан.Это будет работать только тогда, когда у меня установлена ​​частота дискретизации 8000, а записи звучат как мусор.Если я вообще изменю частоту дискретизации, программа принудительно закроется.

Редактировать:

bufferSize = AudioRecord.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_DEFAULT,ENCODING_PCM_16BIT);

Я запускаю это на эмуляторе, Droid Eris, Droid 1 и Droid 2Global

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Попробуйте с этими аргументами, так как это единственный набор аргументов, которые предположительно будут работать на всех устройствах Android:

AudioRecord.getMinBufferSize(
 44100,
 AudioFormat.CHANNEL_IN_MONO,
 AudioFormat.ENCODING_PCM_16BIT)

У меня никогда не было проблем с использованием частоты дискретизации 16000, если для вас слишком велика частота 44,1 кГц. Также имейте в виду, что это минимальный размер записи . В зависимости от вашего приложения, вероятно, было бы неплохо умножить его на 2 или 3, прежде чем использовать это значение для инициализации устройства записи звука.

Если у вас все еще есть проблемы, убедитесь, что источником звука, с которым вы инициализируете объект AudioRecord, является MediaRecorder.AudioSource.MIC.

2 голосов
/ 20 октября 2011

Глядя на код для AudioRecord.java, на самом деле здесь есть только 3 возможности:

  • Ваш каналConfig недействителен.
  • Вы не используете AudioFormat.ENCODING_PCM_16BIT. (8-битные сейчас не поддерживаются.)
  • Аппаратное обеспечение не поддерживает то, что вы просите записать.

Источник: http://google.com/codesearch/p?hl=en#uX1GffpyOZk/media/java/android/media/AudioRecord.java

См. Также: Почему AudioRecord.getMinBufferSize возвращает ERROR_BAD_VALUE (-2)?

...