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:

  1. Herauszufinden, wenn ein clip fertig zu spielen (scheint nicht möglich zu sein, mit Soundclips).
  2. 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.

haben Sie sich überlegt eine 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

Schreibe einen Kommentar