Holen Sie sich die Dauer der audio-Datei
Habe ich eine voice-recorder-app, und ich möchte, um zu zeigen, die Dauer der Aufnahmen in einem listview. Ich Speichere die Aufnahmen wie diese:
MediaRecorder recorder = new MediaRecorder();
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
folder = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Audio recordings");
String[] files = folder.list();
int number = files.length + 1;
String filename = "AudioSample" + number + ".mp3";
File output = new File(Environment.getExternalStorageDirectory()
+ File.separator + "Audio recordings" + File.separator
+ filename);
FileOutputStream writer = new FileOutputStream(output);
FileDescriptor fd = writer.getFD();
recorder.setOutputFile(fd);
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
e.printStackTrace();
}
Wie kann ich die Dauer in Sekunden, die von dieser Datei?
Vielen Dank im Voraus
---EDIT
Ich habe es funktioniert, ich rief MediaPlayer.getduration() in den MediaPlayer.setOnPreparedListener () - Methode, so dass es zurückgegeben 0.
InformationsquelleAutor Simon | 2013-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
MediaMetadataRetriever
ist eine leichte und effiziente Möglichkeit, dies zu tun.MediaPlayer
ist zu schwer und entstehen könnten performance-Problem im high-performance Umfeld wie scrollen, Blättern, Auflistung, usw.Darüber hinaus
Error (100,0)
passieren könnte, aufMediaPlayer
da es eine schwere und manchmal Neustart getan werden muss, um wieder und wieder.Wie bekomme ich MediaMetadataCompat.METADATA_KEY_DURATION?
Ich weiß nicht, über
MediaMetadataCompat
, aberMediaMetadataRetriever.METADATA_KEY_DURATION
ist veraltet. Besser, die Dauer wie diese:String durationStr = mmr.ExtractMetadata(MetadataKey.Duration);
InformationsquelleAutor Jacky
Entweder versuchen, dieses zu erhalten die Dauer in Millisekunden:
Oder Messen Sie die verstrichene Zeit von
recorder.start()
bisrecorder.stop()
in Nanosekunden:Sie nicht haben, um die Datei zu spielen für die zweite. Legen Sie Startzeit, wenn der Benutzer die Aufzeichnung beginnt, und berechnen estimatedTime, wenn der Benutzer die Aufzeichnung beendet. Für die erste option, stellen Sie sicher, dass Sie lassen Sie Ihre MediaRecorder, bevor Sie Sie initialisieren MediaPlayer. Wenn es noch immer 0 zurückgeben, es ist wahrscheinlich ein bug. Ich würde versuchen, verschiedene audio-Formate.
Diese Lösung funktioniert auf einigen Geräten, aber nicht auf andere. Irgendeine Idee warum? Funktioniert auf dem nexus5 aber nicht der hudl. Könnte es sein, unterstützte Medien-Typen? Die Datei, die ich versuche zu Lesen ist ein h264 mp4.
InformationsquelleAutor Erol
Versuchen,
Division auf 1000 zu konvertieren Sekunden.
Hoffe das hat dir geholfen.
Sie haben, um die Dauer wenn die Medien ab ..früher, und es wird -1 zurück. Auch ~@AwadKab leider ist dies nicht konsequent die ganze Zeit, wie es gibt Probleme mit falschen Laufzeiten zurückgegeben wird, für mp4 - vor allem jene, m3u8-container.
InformationsquelleAutor AwadKab
Der Schnellste Weg, dies zu tun ist über
MediaMetadataRetriever
. Es gibt jedoch eine fangenLösung ist, verwenden Sie den absoluten Pfad der Datei zum abrufen von Metadaten von Medien-Datei.
Unten ist das code-snippet, um so zu tun
Jetzt können Sie konvertieren Millisekunde, um für Menschen lesbaren format, entweder mithilfe der unten aufgeführten Formate
Wunderbare Lösung! Das hat für mich große Zeit. Brauchte nur zum extrahieren von Metadaten aus dem Datei-ohne die mühsame und schwere MediaPlayer.
InformationsquelleAutor Hitesh Sahu
Sie nach dem schreiben der Datei, öffnen Sie es in einem MediaPlayer, und rufen Sie getDuration.
Nie Verstand ich es geschafft habe! Ich rief MediaPlayer.getDuration() in den MediaPlayer.setOnPreparedListener Methode und als es wieder 0
InformationsquelleAutor Gabe Sechan
Haben Sie sich Ringdroid?. Es ist ziemlich leicht und der integration ist straight forward. Es funktioniert gut mit VBR Medien-Dateien sowie.
Für dein problem mit dem bekommen der Dauer, möchten Sie vielleicht etwas tun, wie unten mit Ringdroid.
Hoffe, das hilft
InformationsquelleAutor Pawan Kumar
Wenn der audio ist von der url, nur warten, auf Sie vorbereitet:
InformationsquelleAutor Pablo Cegarra
Ist es einfach. verwenden
RandomAccessFile
Unten ist das code-snippet, um so zu tunKönnen Sie, natürlich, vollständiger sein, je nach Ihren Bedürfnissen
InformationsquelleAutor Iman Marashi