Was ist der beste Weg, um eine audio-Datei, Dauer in Android?
Ich bin mit einem SoundPool für das Abspielen von audio-clips in meiner app. Alles ist in Ordnung, aber ich muss wissen, Wann die Wiedergabe des Clips beendet ist.
In dem moment, ich spüre es in meinem app erhalten Sie die Dauer der einzelnen Clips mithilfe von MediaPlayer Instanz. Das funktioniert auch, aber es sieht verschwenderisch laden jede Datei zweimal, nur um die Dauer. Konnte ich in etwa berechnen Sie die Dauer selbst zu wissen, die Länge der Datei (zu finden AssetFileDescriptor), aber ich würde noch nicht wissen, sind die Abtastrate und die Anzahl der Kanäle.
Sehe ich zwei mögliche Lösungen für dieses problem:
- Herauszufinden, wenn ein clip fertig zu spielen (scheint nicht möglich zu sein, mit Soundclips).
- Dass eine Klasse laden kann nur der header der Audiodatei, und geben Sie mir die sample rate/Anzahl der Kanäle (und, im Idealfall, die Probe zu zählen, um die genaue Dauer).
Irgendwelche Vorschläge?
Dank,
Max
Den code, den ich verwende im moment (funktioniert gut, aber ist eher schwer für den Zweck):
String[] fileNames = ...
MediaPlayer mp = new MediaPlayer();
for (String fileName : fileNames) {
AssetFileDescriptor d = context.getAssets().openFd(fileName);
mp.reset();
mp.setDataSource(d.getFileDescriptor(), d.getStartOffset(), d.getLength());
mp.prepare();
int duration = mp.getDuration();
//...
}
On a side note, diese Frage wurde bereits gefragt bekam aber keine Antworten.
onCompletitionListener
? developer.android.com/reference/android/media/...es funktioniert einfach nicht (nie genannt) auf den Geräten, die ich habe. Auch wenn es nicht genannt auf einigen OS-Versionen / einigen Geräten ist es unzuverlässig und daher unbrauchbar.
Sie doublechecked, dass
setOnCompletitionListner
aufgerufen wird, nachdem .start()
?Die Fertigstellung listener ist nur für den MediaPlayer, nicht für SoundPool. Soweit ich weiß, ist der einzige Weg, um einen Rückruf auf eine sound-Veredelung ist mit einem MediaPlayer, der nicht einen SoundPool.
InformationsquelleAutor Gilead | 2011-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du das probiert:
Aber ich bin mir nicht ganz sicher, dass dies ist leichter als vorhandenen code.
MediaMetadataRetriever
Ich habe versucht, aber ich bin immer geworfen eine IllegalArgumentException aus
mmr.setDataSource()
- gibt es eine Möglichkeit, um herauszufinden, wie genau dieser Weg Aussehen sollte? Weil ich bin zu Ahnen, daß der Weg, den ich verwenden könnte falsch sein. Ich bin mit im bundle .m4a und/oder .wav-audio-Dateien.perfekte Antwort +1
nicht für mich arbeiten, bekomme immer Dauer 0
InformationsquelleAutor Meher
Versuchen FFmpegMediaMetadataRetriever:
InformationsquelleAutor William Seemann
eigentlich habe ich code schreiben, um die Dauer der audio-Datei in assets wie @William Seemann schreiben, aber ich MediaMetadata zum abrufen von Dauer...ich ändern Sie meine Antwort, damit Sie besser verstehen,...Sie können diese Methode aufrufen, die für mehrere audio-Datei zu bekommen Dauer.
Habe ich nicht Schreibe diesen Kommentar, weil ich nicht in der Lage war, zu verstehen, Ihre Codes, aber es ist eine gute Praxis, auf SO begleiten Sie Ihre Lösung mit der richtigen Erklärung. Code-Nur die Antworten sind nicht sehr hoch geschätzt.
InformationsquelleAutor Manthan Patel