Ohh...mein Spezialgebiet: mp3-Dateien
Folgendes zum Aufbau einer mp3-Datei
1. grundlegender Aufbau, wie er fast immer zu finden ist:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| -------------- | ID3v2-Tag | | (optional) | -------------- | MPEG-Frames | -------------- | ID3v1-Tag | | (optional) | -------------- |
Informationen zu den ID3v2-Tags unter
www.id3.org/.
Der ID3v1-Tag ist immer 128 Bytes kang und immer am Ende der Datei, wenn er denn vorhanden ist.
2. Kommen wir zu den MPEG-Frames
Ein MPEG-Frame sieht grob so aus:
Quelltext
1: 2: 3: 4: 5:
| ----------------- | 4Bytes: Header | ----------------- | Audio-Daten | ----------------- |
In dem Mpeg-Header steht drin, welche Bitrate, Samplerate, Channlemode usw. Der Frame hat. Ja, alles in 4 Bytes. Daraus kann man die Größe des Frames berechnen. Hat jeder Frame dieselbe Größe (konstante Bitrate), dann kann man aus der Länge eines Frames und der Dateigröße die Anzahl der Frames und somit die Spieldauer des Liedes berechnen.
Jeder Frame kann aber eine andere BitratenInformation enthalten. Dann hat man ein mp3-File mit variabler Bitrate. Bei MP3-Files mit vbr ist meistens der erste MPEG-Frame ein XING-Header, in dem u.a. drin steht, wieviele Frames das File hat. Außerdem ein Sprungstellen-Array, das angibt, an welcher Position im File ungefähr welcher Frame zu finden ist.
Ich hab mal zum Spass ein Programm geschrieben, was alle MPEG-Frames einer mp3-Datei in ein Array einliest, dieses Array permutiert, die Umsortierung in den ID3v2Tag gescheibt und die durcheinandergewürfelten Frames wieder in die Datei schreibt - heraus kommt im Wesentlichen Rauschen. Mit Hilfe der Permutationsinformation aus dem ID3v2Tag konnte man dann das Original wiederherstellen. (Kann man prima für Tauschbörsen benutzen

)
Mp3s sind einigermaßen streaming-fähig. D.h. die einzelnen MPEG-Frames sind einigermaßen unabhängig voneinander - man braucht nicht den Dateianfang, um ein mp3File abzuspielen. Es gibt aber Kodierungsverfahren, die "ruhige" Frames dazu benutzen, um Infos aus benachbarten "unruhigen" Frames mitzuspeichern.
Die streaming-Fähigkeit erlaubt aber auch, in das mp3File weitere Tags einzubauen, ohne die Abspielbarkeit zu beieinträchtigen - die beiden ID3-Tags sind nur die am weitesten verbreiteten. Es gibt noch den Lyric-Tag (obwohl man das in ID3v2 integrieren kann), und es gibt die Möglichkeit, mehrere ID3v2 Tags im File einzubauen.
Außerdem habe ich schon MP3 gesehen, die erstmal mit 1000 Null-Bytes anfangen. Da hat wahrscheinlich jemand den ID3v2Tag entfernt, und die AudioDaten nicht "nach vorne geschoben". Kann man problemlos abspielen.
Folgendes kannst du tun, um an die Audiodaten zu kommen:
- Suche in der Datei nach einem gültigen MPEG-Header. Was ein gültiger Header ist, sollte bei [url]
www.wotsit.org[/url] zu finden sein. Ansonsten
hier.
- Berechne daraus die Größe des Frames, und suche nach entsprechend vielen Bytes den nächsten MPEG-Header und hangele dich so Stück für Stück durch die ganze Datei.
Es gibt also nicht "die Startposition" von Musikdaten im File. Die musst du "per Hand suchen". Solange Byte für Byte die Datei durchgehen, bis man ein Stück Musik gefunden hat. Das kann man dann lesen. Und wenn danach nix mehr kommt, kann man entweder aufgeben, oder Byte für Byte das nächste Fitzelchen Musik suchen.
We are, we were and will not be.