Autor Beitrag
Basti
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: Di 06.09.05 14:45 
Hallo Leute,
nach längerer Pause mal wieder eine kleine Bastel-Frage :lol:

Ich öffne für mein Vorhaben eine MP3-Datei als file of byte,
fragt jetzt lieber nicht wieso :wink:

Ich benötige allerdings nur die Bytes der Musik selber.
Dummerweise steht da aber noch ein Header und ein ID3-Tag und nach mehreren Webseiten wo
dafür unterschiedliche Längen standen und einer, wo stand, dass Header und Tag unterschiedlich
lang sein können, habe ich keine Ahnung wie ich herausfinde wo die Bytes anfangen, die ich suche.
Ich habe auch gelesen, dass am Ende der Datei auch ein Tag stehen könnte, dann bräuchte ich neben
der Startposition auch die Endposition der "Musikbytes".

Ich habe mir ja so gedacht, dass eins der Bytes im Header angeben muss, wo diese Positionen sind,
schon damit der Player es weiss, aber meine Recherchen im Internet haben mir da nix gebracht.

Vielleicht weiss ja hier jemand, wie ich die 2 gesuchten Positionen herausfinden kann
oder hat nen guten Link dazu.

Danke schonmal :)
Sebastian

_________________
Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
rochus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 416

Win XP Prof, Fedora Core 4, SuSE 7.0
D7 Ent, D2005 Pers
BeitragVerfasst: Di 06.09.05 14:48 
www.wotsit.org -> suche nach mp3

_________________
Im Nachhinein ist man immer ein Schlauch!
"Dream as if you'll live forever, live as if you'll die today!" James Dean
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 06.09.05 15:21 
Ohh...mein Spezialgebiet: mp3-Dateien :D

Folgendes zum Aufbau einer mp3-Datei

1. grundlegender Aufbau, wie er fast immer zu finden ist:
ausblenden 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:
ausblenden 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 :lol:)

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.
raven_22
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 95

Win XP pro
D7 Enterprise
BeitragVerfasst: Mo 26.09.05 14:37 
@Basti

Schau dir doch mal folgende Seite an, damit solltest du was anfangen können !
www.fh-jena.de/contr...rg/mp3/mp3_2_res.htm
Und hier sind noch Informationen zum Huffman-Algorithmus.
Damit werden unter andern MP3, MPEG und JPEG komprimiert.
www.pohlig.de/Unterr...mann_Algorithmus.htm


LG Marko

_________________
---_-= raven_22 =-_---
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mo 26.09.05 16:24 
Wow ! Gausi ! warum schreibst du nicht mal ein Tutorial zu dem Thema ?

_________________
In the beginning was the word.
And the word was content-type: text/plain.