Ich nehme Audio für Sprachnachrichten in der App mit dem folgenden Code auf.
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();
Die Verwendung von MediaRecorder.AudioSource.VOICE_COMMUNICATION anstelle von MediaRecorder.AudioSource.MIC) ist sehr hilfreich bei der Aufzeichnung vorverarbeiteter sauberer Audios.
Vor kurzem habe ich jedoch festgestellt, dass einige Probleme, bei denen die aufgezeichneten Dateien leer sind, auf einigen Geräten gemeldet werden, die kürzlich auf Android 10 aktualisiert wurden. Es sollte beachtet werden, dass nicht alle Android 10-Geräte diese Probleme haben, nur einige, z. B. Nokia 6.1 und Mi A2.
Es gibt keinen Fehler oder eine Ausnahme, sondern nur leere Audioausgabedateien.
Wenn ich MediaRecorder.AudioSource.MIC verwende, wird das Problem nicht angezeigt .
Ich habe die folgenden Informationen zu Android 10 und VOICE_COMMUNICATION gefunden. Die Android 10-Version enthält die folgenden Anforderungen für die Erfassung mit VOICE_COMMUNICATION.
Auf dieser Grundlage habe ich die Verfügbarkeit von AcousticEchoCanceler, AutomaticGainControl und NoiseSuppressor mit dem folgenden Code überprüft.
AcousticEchoCanceler.isAvailable()
AutomaticGainControl.isAvailable()
NoiseSuppressor.isAvailable()
Und fand das gleiche Ergebnis auf Mi A2 und OnePlus 6 mit Android 10. Beide Geräte zeigen AcousticEchoCanceler und NoiseSuppressor als verfügbar und AutomaticGainControl als nicht verfügbar.
Da das Problem nicht auf allen Android-Geräten auftritt, möchte ich nicht auf MediaRecorder.AudioSource.MIC zurückgreifen . Gleichzeitig gibt es keinen Fehler, keine Ausnahme oder keinen Differenzierungsfaktor, der mir sagt, wann ich auf MediaRecorder.AudioSource.MIC zurückgreifen soll .
UPDATE: Das Problem wird behoben, wenn Google Assistant auf Mi A2 deaktiviert wird. Dies könnte der Zeiger sein: https://developer.android.com/guide/topics/media/sharing-audio-input
Jede Hilfe hierzu ist willkommen.
quelle
Antworten:
Am Ende habe ich MediaRecorder.AudioSource.VOICE_RECOGNITION anstelle von MediaRecorder.AudioSource.VOICE_COMMUNICATION für alle Android-Versionen verwendet.
Am Ende haben wir Proben auf mehr als 15 verschiedenen Geräten entnommen und festgestellt, dass MediaRecorder.AudioSource.VOICE_RECOGNITION mit den meisten Geräten, einschließlich High-End- und Midrange -Telefonen , am besten funktioniert.
Nach meinem Verständnis scheint das ursprüngliche Problem, mit dem einige Geräte auf einigen Geräten konfrontiert sind, ein Implementierungsproblem der OEMs in Bezug auf Android 10 und VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing zu sein
quelle