Android Länge eines Musikordners

Lucaaa

Bekanntes Mitglied
Hallo!

Ich brauche für meine App die Gesamtlänge aller Mp3-Dateien in einem Ordner. Momentan lese ich die Länge jeder Datei mit MediaMetadataRetriever aus, und rechne die Längen dann zusammen. Das Problem: es dauert ewig. (also schon ein paar Sekunden). Ich habe noch bei keinem Musikplayer gesehen, das da was geladen hat. Also muss es eine Möglichkeit geben, die Gesamtlänge schneller zu berechnen.
Hat da wer eine Idee?
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Wie sieht denn dein Code aus? AFAIK ist das schon die "leichtgewichtigste" Version. Möglichkeit für parallele/hintergrund Tasks?
 

Lucaaa

Bekanntes Mitglied
Wie sieht denn dein Code aus?
Java:
public long calcTotalDuration(File bookdir) {
    File[] audios = bookdir.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.getName().endsWith(".mp3");
        }
    });
long duration = 0;
    MediaMetadataRetriever mmdr =new MediaMetadataRetriever();
for(File f : audios) {
    mmdr.setDataSource(f.getAbsolutePath());
    duration += Long.parseLong(mmdr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
}
    return duration;
}
 

Flown

Administrator
Mitarbeiter
Profiling der Methoden wäre nicht schlecht. Sidenote: lt. Doku steht MediaMetadataRetriever#setDataSource: 'May be time-consuming'
Wenn das eben nicht schneller geht, hast du pech gehabt.
 

mihe7

Top Contributor
Aber es geht schneller. Keine Musikplayer App lädt vor dem (ersten) start Ewigkeiten.

Unabhängig vom System gilt in jedem Fall: falls keine anderen Daten als die Datei selbst zur Verfügung stehen, muss die Spieldauer aus der Datei ermittelt werden.

Dazu muss mindestens lesend auf die Datei zugegriffen werden. Im besten Fall sind in der Datei Metadaten gespeichert, die die Spieldauer direkt oder indirekt angeben.

Jede Datei muss also geöffnet, wenigstens teilweise gelesen und in der Regel auch wieder geschlossen werden. Dafür wird je Datei eine gewisse Zeit benötigt.

Beschleunigen lässt sich das nicht, man kann aber zwei Dinge tun:

1. Antwortzeit der Anwendung verringern
2. Daten (künftig) nicht (mehr) aus der Datei ermitteln

Zu 1.: damit ist gemeint, dass man z. B. die Anwendung startet, der Benutzer damit arbeiten kann aber die Gesamtspieldauer noch nicht sieht, weil die Ermittlung im Hintergrund läuft. Erst, wenn das abgeschlossen ist, wird die Spieldauer angezeigt.

Zu 2.: ich kenne mich mit Music-Player auf Smartphone nicht aus. Auf dem Desktop werden aber meist etwas wie "Medien-Bibliotheken" verwaltet, in die man seine Musiksammlung erst einmal importieren muss. Und bei diesem Import kann eben auch die Spieldauer ausgelesen und in z. B. einer Datenbank gespeichert werden. Wenn ich es richtig sehe, gibt es für Android dafür eine zentrale Stelle: den MediaStore.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Feld eines Eingabeformulars automatisch mit UserID ausfüllen Android & Cross-Platform Mobile Apps 1
C Zugriff auf die Position eines String- bzw Spinner-Arrays Android & Cross-Platform Mobile Apps 1
L Hintergrund eines Switch(Buttons) ändern Android & Cross-Platform Mobile Apps 3
Robat Android Umsetzung eines Spiels mit Minispielen Android & Cross-Platform Mobile Apps 5
A Android Öffnen eines ProgressDialogs Android & Cross-Platform Mobile Apps 5
antonbracke Android OpenGL - Element zum Zeigen eines .obj Models Android & Cross-Platform Mobile Apps 2
M [Android] Wie erstellt man eine Verknüpfung eines Ordners? Android & Cross-Platform Mobile Apps 7
H Frage bei erstellen eines Projectes Android & Cross-Platform Mobile Apps 3
M Inhalt eines Eingabefeldes an einen Server senden? Android & Cross-Platform Mobile Apps 9
B Überlagern eines Layouts Android & Cross-Platform Mobile Apps 6
A Fehler beim Starten eines Intents - alles in einer Klasse funktioniert... Android & Cross-Platform Mobile Apps 4
T Android Ergebnis eines XML+XSLT "transform" in eine HTML - Datei schreiben (Android) Android & Cross-Platform Mobile Apps 2
Bastifantasti Lagesensor eines Handys ansprechen? Android & Cross-Platform Mobile Apps 48
A Problem beim Subtrahieren eines Double von einem Double Android & Cross-Platform Mobile Apps 5
C Woche eines Jahres rausfinden Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben