Le son enregistré à l'aide de MediaRecorder.AudioSource.VOICE_COMMUNICATION est vide sur certains appareils avec Android 10

10

J'enregistre de l'audio pour les messages vocaux dans l'application en utilisant le code suivant.

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();

L'utilisation de MediaRecorder.AudioSource.VOICE_COMMUNICATION au lieu de MediaRecorder.AudioSource.MIC) est très utile pour l'enregistrement d'audios propres prétraités.

Mais, récemment, j'ai trouvé que certains problèmes dans lesquels les fichiers enregistrés sont vides sont signalés sur quelques appareils qui ont été récemment mis à jour vers Android 10. Il convient de noter que tous les appareils Android 10 n'ont pas ces problèmes, seulement quelques-uns, par exemple Nokia 6.1 et Mi A2.

Il n'y a pas d'erreur ou d'exception mais juste des fichiers de sortie audio vides.

Si j'utilise MediaRecorder.AudioSource.MIC), le problème n'est pas visible.

J'ai trouvé les informations suivantes concernant Android 10 et VOICE_COMMUNICATION La version Android 10 inclut les exigences suivantes pour la capture avec VOICE_COMMUNICATION.

Sur cette base, j'ai vérifié la disponibilité d'AcousticEchoCanceler, AutomaticGainControl et NoiseSuppressor en utilisant le code suivant.

AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()

Et a trouvé le même résultat sur Mi A2 et OnePlus 6 avec Android 10. Les deux appareils affichent AcousticEchoCanceler et NoiseSuppressor comme disponibles et AutomaticGainControl comme non disponibles.

Étant donné que le problème n'est pas présent sur tous les appareils Android, je ne veux pas recourir à MediaRecorder.AudioSource.MIC) . En même temps, il n'y a aucune erreur, exception ou facteur de différenciation qui me dit quand me replier sur MediaRecorder.AudioSource.MIC) .

MISE À JOUR: Le problème est résolu lorsque Google Assistant est désactivé sur Mi A2. Cela pourrait être le pointeur: https://developer.android.com/guide/topics/media/sharing-audio-input

Toute aide à ce sujet est appréciée.

binaryKarmic
la source
1
Le message que vous avez lié parle de MediaRecorder.AudioSource.VOICE_CALL. Ce que j'utilise est MediaRecorder.AudioSource. VOICE_COMMUNICATION. Je pense qu'il y a une différence. De plus, je n'enregistre pas d'appels. J'enregistre les messages audio habituels dans une application de messagerie. De plus, il n'échoue pas sur tous les appareils Android 10 mais seulement sur quelques-uns comme je l'ai mentionné plus tôt.
binaryKarmic

Réponses:

1

J'ai fini par utiliser MediaRecorder.AudioSource.VOICE_RECOGNITION au lieu de MediaRecorder.AudioSource.VOICE_COMMUNICATION sur toutes les versions d'Android.

Nous avons fini par prendre des échantillons sur plus de 15 appareils différents et nous avons découvert que MediaRecorder.AudioSource.VOICE_RECOGNITION fonctionne mieux avec la plupart des appareils, y compris les téléphones haut de gamme et milieu de gamme.

Selon ma compréhension, le problème d'origine rencontré sur quelques appareils sur certains appareils semble être des problèmes de mise en œuvre par les OEM en ce qui concerne Android 10 et VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing

binaryKarmic
la source
J'ai rencontré exactement le même problème sur Nokia 6.1, et en effet, désactiver Google Assistant aide. Mais que faire si je veux vraiment utiliser la source audio VOICE_COMMUNICATION? Je ne peux pas demander à nos clients de désactiver leurs assistants et je veux pouvoir utiliser des fonctionnalités de prétraitement audio telles que l'annulation de l'écho acoustique. Je peux peut-être configurer différents effets audio manuellement, mais si vous avez d'autres conseils, ce serait apprécié)
Alexey Ershov
1
Je comprends d'où tu viens. Le problème ici semble être la mise en œuvre de bogues par les OEM qu'ils peuvent ou non résoudre à l'avenir, donc inutile de s'y fier. Vous pouvez effectuer une correction personnalisée, comme observer l'audio enregistré, après quelques secondes. S'il est vide et que la version du système d'exploitation est supérieure à 10, donnez à l'utilisateur la possibilité de désactiver l'assistant ou de passer à une qualité légèrement inférieure en utilisant VOICE_RECOGNITION.
binaryKarmic