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.
źródło
Odpowiedzi:
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
źródło