Не удалось записать с Samsung Galaxy S2, но можно записывать с других телефонов с микрофона - PullRequest
3 голосов
/ 19 октября 2011

Однако мое приложение не может записывать в Samsung Galaxy S 2 с микрофона, оно записывает на других телефонах с микрофона.

Recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
Recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
Recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

В моем коде я выбираю тип источника от 0 до 4, выбираю тип кодера как amr-nb, amr-wb, aac или default, выбираю тип выходного формата как .3gp, .mp4 или .amr, а также выберите аудио канал как 1 или 2. Я пробую все комбинации, которые есть. По крайней мере, одна из комбинаций работает во многих телефонах. Но ни один из них не может работать в Samsung Galaxy S 2. Он записывает файл, и длительность записи соответствует действительности, но голос - только тишина!

В моих исследованиях этой проблемы в Интернете я обнаружил, что она может быть получена из типа микрофона. Хотя в моем коде я выбираю тип источника звука по умолчанию, микрофон, голосовой канал, голосовой канал, голосовой вызов, он не может работать. Затем я установил тип аудиоисточника как жесткий с помощью 0, 1, 2, 3, 4 вместо MediaRecorder.AudioSource.MIC и т. Д. Но это также не могло работать ...

1 Ответ

1 голос
/ 19 октября 2011

У меня были проблемы на S2, когда приложение блокировало микрофон и не отпускало его, особенно если вы выполняете быстрые циклы разработки, когда блокируете и отпускаете микрофон, как только удаляете приложение-установить новую версию).Иногда он разблокируется по прошествии некоторого времени, но верный способ убедиться, что микрофон доступен, - это перезагрузить телефон после неудачной попытки.

Мне удалось записать звук, используя следующие настройки вAudioRecord объект:

int buffer_size = 2 * AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
recorder = new AudioRecord(
  MediaRecorder.AudioSource.MIC,               //audio source
  16000,                                       //16kHz sample rate
  AudioFormat.CHANNEL_IN_MONO,                 //channel
  AudioFormat.ENCODING_PCM_16BIT,              //encoding
  buffer_size );                               //buffer size
...