Nagrany dźwięk przy użyciu MediaRecorder.AudioSource.VOICE_COMMUNICATION jest pusty na niektórych urządzeniach z Androidem 10

10

Nagrywam dźwięk wiadomości głosowych w aplikacji przy użyciu następującego kodu.

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

Użycie MediaRecorder.AudioSource.VOICE_COMMUNICATION zamiast MediaRecorder.AudioSource.MIC) jest bardzo pomocne w nagrywaniu wstępnie przetworzonych czystych plików audio.

Ale ostatnio odkryłem, że niektóre problemy, w których nagrane pliki są puste, są zgłaszane na kilku urządzeniach, które zostały niedawno zaktualizowane do Androida 10. Należy zauważyć, że nie wszystkie urządzenia z Androidem 10 mają te problemy, tylko kilka, tj. Nokia 6.1 i Mi A2.

Nie ma błędu ani wyjątku, tylko puste pliki wyjściowe audio.

Jeśli korzystam z MediaRecorder.AudioSource.MIC), problem nie jest widoczny.

Znalazłem następujące informacje dotyczące Androida 10 i VOICE_COMMUNICATION Wersja Androida 10 zawiera następujące wymagania dotyczące przechwytywania za pomocą VOICE_COMMUNICATION.

Na tej podstawie sprawdziłem dostępność AcousticEchoCanceler, AutomaticGainControl i NoiseSuppressor za pomocą następującego kodu.

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

Znalazłem ten sam wynik na Mi A2 i OnePlus 6 z Androidem 10. Oba urządzenia pokazują AcousticEchoCanceler i NoiseSuppressor jako dostępne i AutomaticGainControl jako niedostępne.

Ponieważ problem nie występuje na wszystkich urządzeniach z Androidem, nie chcę wracać do korzystania z MediaRecorder.AudioSource.MIC) . Jednocześnie nie ma błędu, wyjątku ani czynnika różnicującego, który powiedziałby mi, kiedy mam wrócić do MediaRecorder.AudioSource.MIC) .

AKTUALIZACJA: Problem został rozwiązany, gdy Asystent Google jest wyłączony na Mi A2. Może to być wskaźnik: https://developer.android.com/guide/topics/media/sharing-audio-input

Każda pomoc w tym zakresie jest mile widziana.

binaryKarmic
źródło
1
W poście, który dałeś link, mowa o MediaRecorder.AudioSource.VOICE_CALL. Używam MediaRecorder.AudioSource. VOICE_COMMUNICATION. Wierzę, że jest w tym jakaś różnica. Ponadto nie nagrywam połączeń. Nagrywam zwykłe wiadomości audio w aplikacji do przesyłania wiadomości. Ponadto nie zawodzi na wszystkich urządzeniach z Androidem 10, ale tylko na kilku, jak wspomniałem wcześniej.
binaryKarmic

Odpowiedzi:

1

Skończyło się na użyciu MediaRecorder.AudioSource.VOICE_RECOGNITION zamiast MediaRecorder.AudioSource.VOICE_COMMUNICATION we wszystkich wersjach Androida.

Ostatecznie pobraliśmy próbki na ponad 15 różnych urządzeniach i okazało się, że MediaRecorder.AudioSource.VOICE_RECOGNITION działa najlepiej z większością urządzeń, w tym z wysokiej klasy i średniej klasy telefonów.

Według mojego zrozumienia, pierwotny problem występujący na kilku urządzeniach na niektórych urządzeniach wydaje się być problemami z implementacją przez producentów OEM w odniesieniu do Androida 10 i VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing

binaryKarmic
źródło
Napotkałem dokładnie ten sam problem na Nokii 6.1 i wyłączenie Asystenta Google pomaga. Ale co jeśli naprawdę chcę użyć źródła audio VOICE_COMMUNICATION? Nie mogę prosić naszych klientów o wyłączenie asystentów i chcę mieć możliwość korzystania z funkcji wstępnego przetwarzania dźwięku, takich jak eliminacja echa akustycznego. Może uda mi się ręcznie skonfigurować różne ustawienia audio, ale jeśli otrzymasz inną poradę, będzie to mile widziane)
Alexey Ershov
1
Rozumiem skąd pochodzisz. Wydaje się, że problemem jest błędne wdrożenie przez producentów OEM, które mogą naprawić lub nie w przyszłości, więc nie ma sensu na tym polegać. Możesz wykonać niestandardową poprawkę, na przykład obserwować nagrany dźwięk po kilku sekundach. Jeśli jest pusty, a wersja systemu operacyjnego jest wyższa niż 10, daj użytkownikowi opcję wyłączenia Asystenta lub przełączenia na nieco niską jakość za pomocą VOICE_RECOGNITION.
binaryKarmic