Android AudioRecord e MediaRecorder per la registrazione dell'audio


91

Voglio registrare la voce umana sul mio telefono Android. Ho notato che Android ha due classi per farlo: AudioRecord e MediaRecorder . Qualcuno può dirmi qual è la differenza tra i due e quali sono i casi d'uso appropriati per ciascuno?

Voglio essere in grado di analizzare il linguaggio umano in tempo reale per misurare l'ampiezza, ecc. Ho ragione nel capire che AudioRecord è più adatto per questo compito?

Ho notato che sulla pagina web della guida Android ufficiale per la registrazione dell'audio , usano MediaRecorder senza menzionare AudioRecord.

Risposte:


82

Se vuoi fare la tua analisi mentre la registrazione è ancora in corso, devi usare AudioRecord, come MediaRecorderregistra automaticamente in un file. AudioRecordha lo svantaggio che dopo la chiamata startRecording()è necessario eseguire il polling dei dati dall'istanza AudioRecord. Inoltre, devi leggere ed elaborare i dati abbastanza velocemente in modo che il buffer interno non venga sovraccaricato (guarda nell'output di logcat, AudioRecordti dirà quando ciò accadrà).


Hai un codice di esempio di AudioRecord? La maggior parte di quelli che ho trovato sono MediaRecorder ...
Rommel Paras

@RommelParas guarda in questa classe in "telegram" per la sorgente Android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David

@David Conosci un campione più elementare? Uno che funziona da solo?
sviluppatore Android

@androiddeveloper purtroppo no.
David

33

Da quanto ho capito MediaRecorderè una scatola nera che fornisce un file audio compresso in uscita e AudioRecorderti dà solo un flusso audio grezzo e devi comprimerlo da solo.

MediaRecorderti dà l'ampiezza massima dall'ultima chiamata del getMaxAmplitude()metodo in modo da poter implementare un visualizzatore di suoni, ad esempio.

Quindi nella maggior parte dei casi MediaRecorderè la scelta migliore tranne quelli in cui è necessario eseguire elaborazioni audio complicate e è necessario accedere al flusso audio grezzo.


Grazie per aver menzionato il metodo getMaxAmplitude (). Molto probabilmente è tutto ciò di cui ho bisogno.
Dheeraj Bhaskar

Come posso implementare il visualizzatore utilizzando MediaRecorder?
OnePunchMan

Che cosa aiuta getMaxAmplitude esattamente qui? Non hai bisogno di ottenere quello attuale in ogni singolo momento per il visualizzatore?
sviluppatore Android

18

AudioRecorderer salva prima i dati in minBuffer, quindi vengono copiati da lì nel buffer temporaneo, in MediaRecorder vengono copiati nei file. In AudioRecorder abbiamo bisogno dell'api setRecordPosition () per copiare i dati salvati nella posizione richiesta, mentre in MediaRecorder il puntatore del file fa questo lavoro per impostare la posizione del marker. AudioRecorder può essere utilizzato per quelle app che girano su un emulatore, ciò può essere fatto fornendo una bassa frequenza di campionamento come 8000, mentre usando MediaRecorder l'audio non può essere registrato usando l'emulatore. In AudioRecord lo schermo si spegne dopo qualche tempo, mentre in MediaRecorder lo schermo non si spegne.

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.