Android AudioRecord vs. MediaRecorder zum Aufnehmen von Audio


90

Ich möchte menschliche Stimme auf meinem Android-Handy aufnehmen. Ich habe festgestellt, dass Android zwei Klassen hat, um dies zu tun: AudioRecord und MediaRecorder . Kann mir jemand sagen, was der Unterschied zwischen den beiden ist und welche Anwendungsfälle für jeden geeignet sind?

Ich möchte in der Lage sein, menschliche Sprache in Echtzeit zu analysieren, um die Amplitude usw. zu messen. Verstehe ich richtig, dass AudioRecord für diese Aufgabe besser geeignet ist?

Ich habe auf der offiziellen Webseite des Android- Handbuchs festgestellt , dass sie MediaRecorder verwenden, ohne AudioRecord zu erwähnen.

Antworten:


79

Wenn Sie Ihre Analyse durchführen möchten, während die Aufzeichnung noch läuft, müssen Sie diese AudioRecordals MediaRecorderautomatische Aufzeichnung in einer Datei verwenden. AudioRecordhat den Nachteil, dass Sie nach dem Aufruf startRecording()die Daten selbst von der AudioRecordInstanz abfragen müssen . Außerdem müssen Sie die Daten schnell genug lesen und verarbeiten, damit der interne Puffer nicht überlaufen wird (siehe Logcat-Ausgabe, AudioRecordwird Ihnen mitteilen, wann dies geschieht).


Haben Sie einen Beispielcode für AudioRecord? Die meisten, die ich gefunden habe, sind MediaRecorder ...
Rommel Paras

@RommelParas suchen in dieser Klasse in "Telegramm" nach Android-Quelle. github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/…
David

@ David Kennen Sie ein grundlegenderes Beispiel? Eine, die alleine funktioniert?
Android-Entwickler

@androiddeveloper leider nein.
David

33

Soweit ich weiß, MediaRecorderhandelt es sich um eine Blackbox, die eine komprimierte Audiodatei auf dem Ausgang AudioRecorderliefert und nur einen rohen Soundstrom liefert, den Sie selbst komprimieren müssen.

MediaRecordergibt Ihnen die maximale Stärke vom letzten Aufruf der getMaxAmplitude()Methode an, sodass Sie beispielsweise einen Sound Visualizer implementieren können.

In den meisten Fällen MediaRecorderist dies die beste Wahl, mit Ausnahme derjenigen, bei denen Sie eine komplizierte Klangverarbeitung durchführen sollten und Zugriff auf den rohen Audiostream benötigen.


Vielen Dank für die Erwähnung der Methode getMaxAmplitude (). Das ist höchstwahrscheinlich alles was ich brauche.
Dheeraj Bhaskar

Wie kann ich Visualizer mit MediaRecorder implementieren?
OnePunchMan

Was hilft getMaxAmplitude genau hier? Müssen Sie nicht in jedem Moment den aktuellen für den Visualizer abrufen?
Android-Entwickler

18

AudioRecorderer speichert Daten zuerst in minBuffer und wird dann von dort in den temporären Puffer kopiert. In MediaRecorder werden sie in Dateien kopiert. In AudioRecorder benötigen wir die API setRecordPosition (), um die gespeicherten Daten an die gewünschte Position zu kopieren, während in MediaRecorder der Dateizeiger diesen Job ausführt, um die Position des Markers festzulegen. AudioRecorder kann für Apps verwendet werden, die auf einem Emulator ausgeführt werden. Dies kann durch Bereitstellung einer niedrigen Abtastrate wie 8000 erfolgen. Bei Verwendung von MediaRecorder kann das Audio nicht mit dem Emulator aufgezeichnet werden. In AudioRecord wird der Bildschirm nach einiger Zeit in den Ruhezustand versetzt, während in MediaRecorder der Bildschirm nicht in den Ruhezustand versetzt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.