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.

stackoverflowuser2010
quelle

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

Stephan
quelle
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.

Lampapos
quelle
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.

sanjeev51
quelle