Я записую аудіо для голосових повідомлень у додатку, використовуючи наступний код.
MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
audioRecorder.setOutputFile(audioRecordingFile);
audioRecorder.prepare();
audioRecorder.start();
Використання MediaRecorder.AudioSource.VOICE_COMMUNICATION замість MediaRecorder.AudioSource.MIC) дуже корисно для запису попередньо оброблених чистих аудіозаписів.
Але нещодавно я виявив деякі проблеми, в яких записані файли порожні, повідомляються на кількох пристроях, які нещодавно оновили до Android 10. Слід зазначити, що не всі пристрої Android 10 мають ці проблеми, лише кілька, тобто Nokia 6.1 і Mi A2.
Немає помилок чи винятків, а лише порожні аудіофайли.
Якщо я використовую MediaRecorder.AudioSource.MIC), проблема не помічена.
Я знайшов наступну інформацію, пов’язану з Android 10 та VOICE_COMMUNICATION. Випуск Android 10 включає такі вимоги щодо зйомки за допомогою VOICE_COMMUNICATION.
На основі цього я перевірив наявність AcousticEchoCanceler, AutomaticGainControl та NoiseSuppressor, використовуючи наступний код.
AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()
І той самий результат виявлено на Mi A2 та OnePlus 6 з Android 10. На обох пристроях відображаються AcousticEchoCanceler та NoiseSuppressor як доступні, а AutomaticGainControl як недоступні.
Оскільки ця проблема існує не на всіх пристроях Android, я не хочу відмовлятися від використання MediaRecorder.AudioSource.MIC) . У той же час немає помилки, винятку чи диференціюючого фактора, який підказує мені, коли потрібно повернутися на MediaRecorder.AudioSource.MIC) .
ОНОВЛЕННЯ: Проблема вирішується, коли Google Асистент вимкнено на Mi A2. Це може бути вказівник: https://developer.android.com/guide/topics/media/sharing-audio-input
Будь-яка допомога щодо цього вдячна.