Hallo,
ich habe ein Problem.
Ich programmiere mit C++ Builder 5.0. Ich würde gerne die Länge des Liedes eines MP3 Files auslesen ohne es zuvor im Mediaplayer vom Builder zu öffnen.
Danke schon im Voraus.
Hallo,
ich habe ein Problem.
Ich programmiere mit C++ Builder 5.0. Ich würde gerne die Länge des Liedes eines MP3 Files auslesen ohne es zuvor im Mediaplayer vom Builder zu öffnen.
Danke schon im Voraus.
hallo Scuba,
Die Groesse der Datei, in Bytes, kannst Du Dir mit der win_api - Funktion GetFileSize() anzeigen lassen. Dafür oeffnest Du die Datei mit der CreateFile() (diese googeln), das Handle übergibst Du an die GetFileSize(). Jetzt brauchst Du noch dne Kompressionsgrad, also „kb/sekunde“ (der ist je nach „Layer“ unterschiedlich), mit dem kannst Du dann die Dauer berechnen.
Aber: jede Datei hat einen „Header“ zu Beginn, in dem diverse Eigenschaften der Datei drin stehen. Vermutlich findest Du dort auch die Dauer in Sekunden o.ä. angegeben. Die Groesse des Headers, in Bytes, muesstest Du nach dem obigen Vefahren noch abziehen.
Versuch’s einmal hier:
http://www.fh-jena.de/contrib/fb/et/personal/ansorg/…
oder hier:
http://de.wikipedia.org/wiki/Mp3
gerade bei „de.wikipedia.org“ findest Du eigentlich alles ueber Datei-Formate.
lg
Martin
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Danke Martin, aber es gibt doch sicher noch ne einfachere Möglichkeit. Dann wäre es schneller das Ding im TMediaPlayer kurz zu öffnen und dann die Länge des Liedes auszulesen. Windows mache es ja auch irgendwie, wenn ich rechte Maus->Eigenschaften von nem MP3 File mache sehe ich unter „Erweitert“ ja auch die Liedlänge.
LG Scuba
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hy,
hier wird in C# http://www.devhood.com/tutorials/tutorial_details.as… u. A. die Länge (über den Header) ausgelesen.
Das funktioniert aber mehr oder weniger nach der bereits beschriebenen Methode.
Danke für eure Posts, aber es muss doch ne einfachere Methode geben. Und das ganze in C++. Irgendwo in dem File muss es doch stehen.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Scuba,
Danke für eure Posts, aber es muss doch ne einfachere Methode
geben. Und das ganze in C++. Irgendwo in dem File muss es doch
stehen.
Nein, steht es nicht.
Die mp3-Datei besteht aus einzelnen Frames, die alle gleich lang sind. Die ersten 4 Bytes bilden den Header. Dessen Bits enthalten Informationen über Bitrate, Abtastfrequenz, Mono oder Stereo usw. und das für jeden Frame. Jeder Frame hat 1152 Samples, das sind z. B. bei 44.1 kHz Abtastfrequenz ein wenig mehr als 25 Millisekunden.
Das heißt, Du kannst eine mp3-Datei teilen in kleine Schnipsel, so wie Du ein Tonband zerschneiden kannst in Teile mit entsprechend kurzen Tonsequenzen. Die mp3-Schnipsel enthalten ganze Frames, sodaß ihre zeitliche Länge ein ganzzahliges Vielfaches der Länge eines Einzelframes ausmacht. Beim Abspielen findet das Programm immer am Anfang einen Header mit den nötigen Informationen.
Das mp3-Format ist so konstruiert, daß man die Dateien leicht „schneiden“ kann, wie man es vom Tonband kennt.
Deshalb steht nirgendwo in mp3-Datei, daß sie z. B. 5 Minuten lang ist.
Grüße,
I.