L'audio registrato con MediaRecorder.AudioSource.VOICE_COMMUNICATION è vuoto su alcuni dispositivi con Android 10


10

Sto registrando l'audio per i messaggi vocali nell'app usando il seguente codice.

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'uso di MediaRecorder.AudioSource.VOICE_COMMUNICATION anziché MediaRecorder.AudioSource.MIC) è molto utile per la registrazione di audio puliti preelaborati.

Ma recentemente ho riscontrato alcuni problemi in cui i file registrati sono vuoti vengono segnalati su alcuni dispositivi che sono stati recentemente aggiornati ad Android 10. Va notato che non tutti i dispositivi Android 10 hanno questi problemi, solo alcuni cioè Nokia 6.1 e Mi A2.

Non ci sono errori o eccezioni, ma solo file di output audio vuoti.

Se utilizzo MediaRecorder.AudioSource.MIC), il problema non si vede.

Ho trovato le seguenti informazioni relative ad Android 10 e VOICE_COMMUNICATION La versione di Android 10 include i seguenti requisiti per l'acquisizione con VOICE_COMMUNICATION.

Sulla base di questo ho verificato la disponibilità di AcousticEchoCanceler, AutomaticGainControl e NoiseSuppressor utilizzando il seguente codice.

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

E ho trovato lo stesso risultato su Mi A2 e OnePlus 6 con Android 10. Entrambi i dispositivi mostrano AcousticEchoCanceler e NoiseSuppressor come disponibili e AutomaticGainControl come non disponibile.

Poiché il problema non è presente su tutti i dispositivi Android, non voglio ripiegare sull'uso di MediaRecorder.AudioSource.MIC) . Allo stesso tempo, non ci sono errori, eccezioni o fattori di differenziazione che mi dicono quando ricorrere a MediaRecorder.AudioSource.MIC) .

AGGIORNAMENTO: il problema viene risolto quando Google Assistant è disattivato su Mi A2. Questo potrebbe essere il puntatore: https://developer.android.com/guide/topics/media/sharing-audio-input

Qualsiasi aiuto in merito è apprezzato.



1
Il post che hai collegato parla di MediaRecorder.AudioSource.VOICE_CALL. Quello che sto usando è MediaRecorder.AudioSource. VOICE_COMMUNICATION. Credo che ci sia qualche differenza. Inoltre, non sto registrando le chiamate. Sto registrando i soliti messaggi audio in un'app di messaggistica. Inoltre, non sta fallendo su tutti i dispositivi Android 10 ma solo su alcuni, come ho già detto.
binaryKarmic

Risposte:


1

Ho finito per usare MediaRecorder.AudioSource.VOICE_RECOGNITION invece di MediaRecorder.AudioSource.VOICE_COMMUNICATION su tutte le versioni di Android.

Abbiamo finito per prendere campioni su oltre 15 dispositivi diversi e abbiamo scoperto che MediaRecorder.AudioSource.VOICE_RECOGNITION funziona meglio con la maggior parte dei dispositivi, inclusi telefoni di fascia alta e media.

Secondo la mia comprensione, il problema originale affrontato su alcuni dispositivi su alcuni dispositivi sembra problemi di implementazione da parte degli OEM rispetto ad Android 10 e VOICE_COMMUNICATION https://source.android.com/devices/audio/implement-pre-processing


Ho affrontato esattamente lo stesso problema su Nokia 6.1, e infatti disattivare Google Assistant aiuta. E se volessi davvero utilizzare la sorgente audio VOICE_COMMUNICATION? Non posso chiedere ai nostri clienti di disabilitare i loro assistenti e desidero poter utilizzare le funzioni di preelaborazione audio come la cancellazione dell'eco acustico. Forse posso impostare manualmente diversi audio fx, ma se avessi qualche altro consiglio, sarebbe apprezzato)
Alexey Ershov

1
Capisco da dove vieni. Il problema qui sembra un'implementazione errata da parte degli OEM che potrebbero o non potrebbero risolvere in futuro, quindi non ha senso fare affidamento su di esso. Puoi fare qualche correzione personalizzata come osservare l'audio registrato dire dopo un paio di secondi. Se è vuoto e la versione del sistema operativo è superiore a 10, offri all'utente la possibilità di disattivare l'Assistente o passare a una qualità leggermente bassa utilizzando VOICE_RECOGNITION.
binaryKarmic
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.