Android AudioRecord vs. MediaRecorder para gravação de áudio

91

Quero gravar voz humana no meu telefone Android. Percebi que o Android tem duas classes para fazer isso: AudioRecord e MediaRecorder . Alguém pode me dizer qual é a diferença entre os dois e quais são os casos de uso apropriados para cada um?

Quero ser capaz de analisar a fala humana em tempo real para medir a amplitude, etc. Estou correto em entender que AudioRecord é mais adequado para essa tarefa?

Notei na página oficial do guia Android para gravação de áudio , que eles usam MediaRecorder sem menção de AudioRecord.

stackoverflowuser2010
fonte

Respostas:

82

Se você quiser fazer sua análise enquanto a gravação ainda está em andamento, você precisa usar AudioRecord, como MediaRecordergrava automaticamente em um arquivo. AudioRecordtem a desvantagem de que, depois de chamar, startRecording()você precisa pesquisar os dados da AudioRecordinstância. Além disso, você deve ler e processar os dados rápido o suficiente para que o buffer interno não seja sobrecarregado (observe a saída do logcat, AudioRecordvocê saberá quando isso acontecer).

Stephan
fonte
Você tem um código de amostra de AudioRecord? A maioria dos que encontrei são MediaRecorder ...
Rommel Paras
@RommelParas procure nesta aula em "telegrama" para fonte android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David
@David Você conhece uma amostra mais básica? Um que funciona por conta própria?
desenvolvedor Android de
@androiddeveloper infelizmente não.
David
33

Pelo que entendi, MediaRecorderé uma caixa preta que fornece um arquivo de áudio compactado na saída e AudioRecorderfornece apenas um fluxo de som bruto e você tem que compactá-lo sozinho.

MediaRecorderdá a você a amplitude máxima da última chamada do getMaxAmplitude()método para que você possa implementar um visualizador de som, por exemplo.

Portanto, na maioria dos casos, MediaRecorderé a melhor escolha, exceto aqueles em que você deve fazer algum processamento de som complicado e precisa de acesso ao fluxo de áudio bruto.

Lampapos
fonte
Obrigado por mencionar o método getMaxAmplitude (). Provavelmente é tudo de que preciso.
Dheeraj Bhaskar
Como posso implementar o visualizador usando MediaRecorder?
OnePunchMan
O que getMaxAmplitude ajuda exatamente aqui? Você não precisa obter o atual a cada momento para o visualizador?
desenvolvedor do Android
18

AudioRecorderer primeiro salva os dados no minBuffer, em seguida, eles são copiados de lá para o buffer temporário, no MediaRecorder são copiados para os arquivos. No AudioRecorder, precisamos da api setRecordPosition () para copiar os dados salvos na posição necessária, enquanto no MediaRecorder o ponteiro do arquivo faz esse trabalho para definir a posição do marcador. AudioRecorder pode ser usado para aqueles aplicativos executados em um emulador, isso pode ser feito fornecendo uma taxa de amostragem baixa, como 8000, enquanto usando o MediaRecorder o áudio não pode ser gravado usando o emulador. No AudioRecord, a tela hiberna após algum tempo, enquanto no MediaRecorder a tela não hiberna.

sanjeev51
fonte