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.

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).


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.