Android AudioRecord vs MediaRecorder pour l'enregistrement audio

91

Je souhaite enregistrer une voix humaine sur mon téléphone Android. J'ai remarqué qu'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é que sur la page Web officielle du guide Android pour l'enregistrement audio , ils utilisent MediaRecorder sans mentionner AudioRecord.

stackoverflowuser2010
la source

Réponses:

82

Si vous souhaitez effectuer votre analyse alors que l'enregistrement est toujours en cours, vous devez utiliser AudioRecord, comme MediaRecorderenregistre automatiquement dans un fichier. AudioRecordprésente l'inconvénient qu'après l'appel, startRecording()vous devez interroger vous-même les données à partir de l' AudioRecordinstance. En outre, vous devez lire et traiter les données assez rapidement pour que le tampon interne ne soit pas surchargé (regardez dans la sortie de logcat, AudioRecordvous dira quand cela se produit).

Stephan
la source
Avez-vous un exemple de code d'AudioRecord? La plupart de ceux que j'ai trouvés sont MediaRecorder ...
Rommel Paras
@RommelParas regarde dans cette classe dans "télégramme" pour la source Android. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David
@David Connaissez-vous un échantillon plus basique? Un qui fonctionne tout seul?
développeur android
@androiddeveloper malheureusement non.
David
33

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

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

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

Lampapos
la source
Merci d'avoir mentionné la méthode getMaxAmplitude (). C'est probablement tout ce dont j'ai besoin.
Dheeraj Bhaskar
Comment puis-je implémenter le visualiseur à l'aide de MediaRecorder?
OnePunchMan
Qu'est-ce que getMaxAmplitude aide exactement ici? N'avez-vous pas besoin d'obtenir l'actuel à chaque instant pour le visualiseur?
développeur android
18

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, alors 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 fonctionnent sur un émulateur, cela peut être fait en fournissant une faible fréquence d'échantillonnage telle que 8000, tout 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.

sanjeev51
la source