Записаний аудіо за допомогою MediaRecorder.AudioSource.VOICE_COMMUNICATION на деяких пристроях з Android 10 порожній


10

Я записую аудіо для голосових повідомлень у додатку, використовуючи наступний код.

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

Будь-яка допомога щодо цього вдячна.



1
Повідомлення, з яким ви пов’язали, розповідає про MediaRecorder.AudioSource.VOICE_CALL. Я використовую MediaRecorder.AudioSource. VOICE_COMMUNICATION. Я вважаю, що в цьому є якась різниця. Також я не записую дзвінки. Я записую звичайні звукові повідомлення в програму обміну повідомленнями. Крім того, він працює не на всіх пристроях Android 10, а лише на кількох, як я вже згадував раніше.
binaryKarmic

Відповіді:


1

Я закінчив використовувати MediaRecorder.AudioSource.VOICE_RECOGNITION замість MediaRecorder.AudioSource.VOICE_COMMUNICATION на всіх версіях Android.

Ми взяли зразки на 15+ різних пристроях і з’ясували, що MediaRecorder.AudioSource.VOICE_RECOGNITION найкраще працює з більшістю пристроїв, включаючи телефони високого та середнього класу.

Наскільки я розумію, оригінальна проблема, що виникає на кількох пристроях на деяких пристроях, виглядає як проблеми із впровадженням OEM-виробників щодо Android 10 та VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing


Я зіткнувся з точно такою ж проблемою і в Nokia 6.1, і відключення програми Google Assistant допомагає. Але що робити, якщо я дійсно хочу використовувати джерело звуку VOICE_COMMUNICATION? Я не можу попросити наших клієнтів відключити своїх помічників, і я хочу мати можливість використовувати функції попередньої обробки звуку, такі як скасування акустичного відлуння. Можливо, я можу налаштувати різні аудіо fx вручну, але якщо ви отримаєте якісь інші поради, це буде вдячно)
Олексій Єршов

1
Я розумію, звідки ти родом. Проблема тут здається невдалою реалізацією OEM-виробників, які вони можуть або не можуть виправити в майбутньому, тому немає жодного сенсу покладатися на це. Ви можете виконати певні виправлення, наприклад спостерігати за записаними звуковими сказками через пару секунд. Якщо вона порожня, а версія ОС вище 10, дайте користувачеві можливість вимкнути помічник або перейти на трохи низьку якість, використовуючи VOICE_RECOGNITION.
binaryKarmic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.