Saya merekam audio untuk pesan suara di aplikasi menggunakan kode berikut.
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();
Penggunaan MediaRecorder.AudioSource.VOICE_COMMUNICATION bukan MediaRecorder.AudioSource.MIC) sangat membantu dalam merekam audio bersih pra-diproses.
Tapi, baru-baru ini saya menemukan beberapa masalah di mana file yang direkam kosong dilaporkan pada beberapa perangkat yang baru-baru ini diperbarui ke Android 10. Perlu dicatat bahwa tidak semua perangkat Android 10 memiliki masalah ini, hanya beberapa yaitu Nokia 6.1 dan Mi A2.
Tidak ada kesalahan atau pengecualian tetapi hanya mengosongkan file output audio.
Jika saya menggunakan MediaRecorder.AudioSource.MIC) maka masalah tidak terlihat.
Saya menemukan informasi berikut yang terkait dengan Android 10 dan VOICE_COMMUNICATION Rilis Android 10 mencakup persyaratan untuk penangkapan dengan VOICE_COMMUNICATION berikut.
Berdasarkan ini saya memeriksa ketersediaan AcousticEchoCanceler, AutomaticGainControl dan NoiseSuppressor menggunakan kode berikut.
AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()
Dan menemukan hasil yang sama pada Mi A2 dan OnePlus 6 dengan Android 10. Kedua perangkat menunjukkan AcousticEchoCanceler dan NoiseSuppressor sebagai tersedia dan AutomaticGainControl tidak tersedia.
Karena masalah ini tidak ada pada semua perangkat Android, saya tidak ingin kembali menggunakan MediaRecorder.AudioSource.MIC) . Pada saat yang sama, tidak ada kesalahan, pengecualian atau faktor pembeda yang memberi tahu saya kapan harus kembali ke MediaRecorder.AudioSource.MIC) .
UPDATE: Masalah akan teratasi ketika Google Assistant dimatikan pada Mi A2. Ini mungkin pointer: https://developer.android.com/guide/topics/media/sharing-audio-input
Setiap bantuan mengenai hal ini sangat kami hargai.
sumber
Jawaban:
Saya akhirnya menggunakan MediaRecorder.AudioSource.VOICE_RECOGNITION alih-alih MediaRecorder.AudioSource.VOICE_COMMUNICATION di semua versi android.
Kami akhirnya mengambil sampel pada 15+ perangkat berbeda dan menemukan bahwa MediaRecorder.AudioSource.VOICE_RECOGNITION berfungsi paling baik dengan sebagian besar perangkat termasuk ponsel kelas atas dan menengah.
Sesuai pemahaman saya, masalah asli yang dihadapi pada beberapa perangkat pada beberapa perangkat sepertinya masalah implementasi oleh OEM sehubungan dengan Android 10 dan VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing
sumber