Не удалось записать на Samsung Galaxy S2, но можно было записывать на другие телефоны с микрофона

Однако мое приложение не могло записывать в 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 и т. Д. Но он также не мог работать ...


person parloid    schedule 19.10.2011    source источник


Ответы (1)


У меня были проблемы с 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
person Aaron C    schedule 19.10.2011
comment
Спасибо, Аарон. Мое приложение начинает запись, когда начинается телефонный разговор, и останавливается, когда разговор заканчивается. Продолжительность записи верная, но есть только тишина. Так что не уверен, что микрофон открытый (или бесплатный). Как я могу проверить, свободен ли микрофон во время работы моего приложения? - person parloid; 20.10.2011
comment
Вы можете проверить, доступен ли микрофон, вызвав функцию getState(). Если он равен STATE_UNINITIALIZED, значит, вы не смогли схватить микрофон. - person Aaron C; 20.10.2011
comment
Если вы пытаетесь записать звук разговора, вы можете изучить возможность использования MediaRecorder.AudioSource.VOICE_DOWNLINK или MediaRecorder.AudioSource.VOICE_UPLINK в качестве источника микрофона. - person Aaron C; 20.10.2011
comment
Мне удалось записать голос разговора в S2, установив audiosource Recorder.AudioSource (2); - person parloid; 21.10.2011
comment
Когда источник звука установлен на два (2), мой api, работающий на Galaxy S2, записывает голос как по восходящей, так и по нисходящей линии связи. Но я не могу понять, почему это 2? 2 равно MediaRecorder.AudioSource.VOICE_UPLINK - person parloid; 21.10.2011