Не смог записать с Samsung Galaxy S2, но мог записать с другими телефонами с MIC
-
27-10-2019 - |
Вопрос
Однако мое приложение не могло записать в Samsung Galaxy S 2 из MIC, оно записывалось в других телефонах от MIC.
Recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
Recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
Recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
В моем коде я выбираю тип источника от 0 до 4, выберите тип Encoder как AMR-NB, AMR-WB, AAC или по умолчанию, выберите тип формата выходного сигнала как .3GP, .MP4 или .AMR, а также выберите аудиоканал Как 1 или 2. Я пробую все комбинации, которые встают. По крайней мере, одна из комбинаций работает во многих телефонах. Но ни один из них не мог работать в Samsung Galaxy S 2. Он записывает файл, и продолжительность записи правда, но голос - только молчание!
В своем исследовании в Интернете с этой проблемой я обнаружил, что это может быть получено из типа микрофона. Хотя в своем коде я выбираю тип источника аудио в качестве по умолчанию, микрофону, голосовой нисходящей линии, голосовой линии, голосовой вызове, он не может работать. Затем я установил тип источника звука как на это 0, 1, 2, 3, 4 вместо MediareCorder.Audiosource.MIC и т. Д., Но это также не могло работать ...
Решение
У меня были проблемы на 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