Mit MediaRecorder.AudioSource.VOICE_COMMUNICATION aufgenommenes Audio ist auf einigen Geräten mit Android 10 leer

10

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.

binaryKarmic
quelle
1
Der von Ihnen verlinkte Beitrag befasst sich mit MediaRecorder.AudioSource.VOICE_CALL. Was ich benutze, ist MediaRecorder.AudioSource. VOICE_COMMUNICATION. Ich glaube, es gibt einen Unterschied. Außerdem nehme ich keine Anrufe auf. Ich nehme die üblichen Audio-Nachrichten in einer Messaging-App auf. Außerdem schlägt es nicht auf allen Android 10-Geräten fehl, sondern nur auf einigen, wie bereits erwähnt.
binaryKarmic

Antworten:

1

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

binaryKarmic
quelle
Ich hatte genau das gleiche Problem mit Nokia 6.1, und tatsächlich hilft das Deaktivieren von Google Assistant. Aber was ist, wenn ich wirklich die Audioquelle VOICE_COMMUNICATION verwenden möchte? Ich kann unsere Kunden nicht bitten, ihre Assistenten zu deaktivieren, und ich möchte Audio-Vorverarbeitungsfunktionen wie die akustische Echokompensation verwenden können. Vielleicht kann ich verschiedene Audio-Effekte manuell einrichten, aber wenn Sie andere Ratschläge haben, wäre es dankbar)
Alexey Ershov
1
Ich verstehe, woher du kommst. Das Problem hier scheint eine fehlerhafte Implementierung durch die OEMs zu sein, die sie möglicherweise in Zukunft beheben oder nicht, sodass es keinen Sinn macht, sich darauf zu verlassen. Sie können einige benutzerdefinierte Korrekturen vornehmen, z. B. das aufgenommene Audio nach einigen Sekunden beobachten. Wenn es leer ist und die Betriebssystemversion über 10 liegt, geben Sie dem Benutzer die Möglichkeit, den Assistenten auszuschalten oder mithilfe von VOICE_RECOGNITION auf eine geringfügig niedrige Qualität umzuschalten.
binaryKarmic