web-dev-qa-db-fra.com

Android AudioRecord vs. MediaRecorder pour l'enregistrement audio

Je veux enregistrer la voix humaine sur mon Android téléphone. J'ai remarqué que Android a deux classes pour ce faire: AudioRecord et - MediaRecorder . Quelqu'un peut-il me dire quelle est la différence entre les deux et quels sont les cas d'utilisation appropriés pour chacun?

Je veux pouvoir analyser la parole humaine en temps réel pour mesurer l'amplitude, etc. Ai-je raison de comprendre qu'AudioRecord est mieux adapté à cette tâche?

J'ai remarqué sur le Android page Web guide pour l'enregistrement audio officiel, qu'ils utilisent MediaRecorder sans mentionner AudioRecord.

82

Si vous souhaitez effectuer votre analyse alors que l'enregistrement est en cours, vous devez utiliser AudioRecord, car MediaRecorder enregistre automatiquement dans un fichier. AudioRecord a l'inconvénient, après avoir appelé startRecording(), vous devez interroger les données vous-même à partir de l'instance AudioRecord. De plus, vous devez lire et traiter les données suffisamment rapidement pour que le tampon interne ne soit pas dépassé (regardez dans la sortie logcat, AudioRecord vous dira quand cela se produira).

74
Stephan

Si je comprends bien, MediaRecorder est une boîte noire qui donne un fichier audio compressé à la sortie et AudioRecorder vous donne juste un flux sonore brut et vous devez le compresser vous-même.

MediaRecorder vous donne l'amplitude maximale depuis le dernier appel de la méthode getMaxAmplitude() afin que vous puissiez implémenter un visualiseur sonore par exemple.

Donc, dans la plupart des cas, MediaRecorder est le meilleur choix, sauf ceux dans lesquels vous devez effectuer un traitement sonore compliqué et vous devez avoir accès au flux audio brut.

29
Lampapos

AudioRecorderer enregistre d'abord les données dans minBuffer puis elles sont copiées à partir de là vers le tampon temporaire, dans MediaRecorder elles sont copiées dans des fichiers. Dans AudioRecorder, nous avons besoin de l'api setRecordPosition () pour copier les données enregistrées à la position requise, tandis que dans MediaRecorder, le pointeur de fichier fait ce travail pour définir la position du marqueur. AudioRecorder peut être utilisé pour les applications qui s'exécutent sur un émulateur, cela peut être fait en fournissant un faible taux d'échantillonnage tel que 8000, tandis qu'en utilisant MediaRecorder, l'audio ne peut pas être enregistré à l'aide de l'émulateur. Dans AudioRecord, l'écran se met en veille après un certain temps, tandis que dans MediaRecorder, l'écran ne se met pas en veille.

16
sanjeev51