mciSendString - Spieldauer ermitteln
-
Hallo, und zwar habe ich einen kleinen Video / Musikplayer geschrieben.
Dieser funktioniert soweit prima. Nun möchte ich die Gesamtlänge des zum Zeitpunkt abgespielten Titels ermitteln.
Bei Video's stimmt der ermittelte Wert. Bei MP3's hingegen ist es Wahlweise mal mehr und mal weniger Zeit.So hat ein Titel mit 0:57 Minuten Spieldauer nur 0:50 Minuten, ein Titel mit 5:07 Minuten hat hingegen 9:45 Minuten laut dem was übergeben wird.
Die genaue Spieldauer benötige ich, da nach ablauf der Spieldauer der nächste Titel aus der Playlist gespielt werden soll.
Die Funktion zum ermitteln der Gesamtspieldauer:
void GetLength() { // Buffer zum Speichern der Zeit char* buffer = new char[256]; AnsiString mciCommand = "status MP3 Length"; // Anfrage der Spieldauer mciSendString(mciCommand.c_str(), buffer, 256, NULL); // Spieldauer auf Variable für millisekunden einlesen int nmsec = StrToInt(buffer); // Spieldauer in sekunden berechnen int nsec = nmsec/1000; // Spieldauer in minuten berechnen int nmin = nsec/60; // Verbleibende Sekunden ermitteln nsec = nsec - (nmin*60); // Ausgabe der Spieldauer Label9->Caption = IntToStr(nmin)+ ":" + IntToStr(nsec); }
-
Irgendwie kann ich mir eines nicht erklären. Bei einigen mp3's ist die Spieldauer genau richtig.
Bei denen, bei welchen sie zu hoch ist kommt es zu einem eigenartigen Effekt. Ich habe in dem Timer, welcher zum nächsten Lied wechselt eine if Abfrage drin, welche erst dann wahr ist, wenn die abgelaufene Spielzeit der Gesamtdauer entspricht. Sowie das Lied zu Ende ist, geht er ist die Bedingung war. Für mich unerklärlich.
Habe dann den aufruf der Funktion herausgenommen, mit welcher das nächste Lied gespielt wird und siehe da, er macht einen Sprung vom eigentlichen Ende des Liedes auf die "angebliche Spieldauer".
Kann mir jemand diesen Effekt erklären? Ich mein, da muss sich ja am Ende der Datei noch etwas befinden, was da unpassend ist.
Genauso ist mir unklar warum einige Lieder mit zu geringer Spieldauer angezeigt werden. Hier habe ich ja das Problem, dass mitten im Lied abgebrochen wird.
Über google fand ich gerade heraus, dass einige mp3's falsche Headerangaben haben. Aber woher kommt dies?!