M3D-Format: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) K |
Admin (Diskussion | Beiträge) K |
||
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Das [[Audiomodul]] wäre zwar in der Lage, MP3-Dateien auch ohne Konvertierung abzuspielen, dies bringt jedoch das Problem mit sich, dass bei einer abrupten Änderung der Showzeit z.B. ein Fortsetzen der Show an einer anderen Stelle nach einer | + | Das [[Audiomodul]] wäre zwar in der Lage, MP3-Dateien auch ohne Konvertierung abzuspielen, dies bringt jedoch das Problem mit sich, dass bei einer abrupten Änderung der Showzeit (z.B. ein Fortsetzen der Show an einer anderen Stelle nach einer Pause) die exakte Position für die Fortsetzung der Musik innerhalb der Datei nicht angesprungen werden könnte. Daher kann mit dem Audiomodul nur das M3D-Format, eine um zusätzliche Informationen ergänzte MP3-Datei, abgespielt werden. Dieses Format behebt die angesprochene Schwäche des MP3-Formats und erlaubt ein sehr schnelles, wahlfreies Springen innerhalb der Musik auf ca. 50 Millisekunden genau. |
+ | '''Eine M3D-Datei kann aus einer MP3-Datei mittels eines [[Audiomodul:Dateien|Umwandlungstools]] erzeugt werden.''' | ||
== Technischer Hintergrund == | == Technischer Hintergrund == | ||
=== Aufbau einer MP3-Datei === | === Aufbau einer MP3-Datei === | ||
− | Eine MP3-Datei besteht aus sogenannten Frames. Jeder Frame enthält Audioinformationen einer bestimmten Länge, beim MPEG 1, Layer 3-Format sind das je nach Sampling-Rate 24 oder 26,1 Millisekunden. Jeder Frame ist (mehr oder weniger) ohne die vorherigen Frames der Datei abspielbar, so dass ein Wiedereinsetzen innerhalb der Datei innerhalb von +/- ca. 25 Millisekunden kein Problem darstellt. Ein größeres Problem ist es, die korrekte Position innerhalb der Datei aufzufinden. | + | Eine MP3-Datei besteht aus sogenannten Frames. Jeder Frame enthält Audioinformationen einer bestimmten Länge, beim MPEG 1, Layer 3-Format sind das je nach Sampling-Rate 24 oder 26,1 Millisekunden. Jeder Frame ist (mehr oder weniger) ohne die vorherigen Frames der Datei abspielbar, so dass ein Wiedereinsetzen innerhalb der Datei innerhalb von +/- ca. 25 Millisekunden kein Problem darstellt. Ein größeres Problem ist es, die korrekte Position innerhalb der Datei aufzufinden. MP3-Frames enthalten leider keine absolute Information darüber, an welcher ''zeitlichen'' Position innerhalb der Datei sie abgespielt werden müssen. Die Tatsache, dass jeder Frame - je nach Bitrate bei VBR - unterschiedlich lang sein kann, erschwert das Auffinden der korrekten Abspielposition innerhalb der Datei zusätzlich. |
− | Um die korrekte Position zu finden, müsste die Datei letztendlich also von vorne beginnend durchsucht werden. Jeder Frame müsste gelesen und analysiert werden, um die Abspielzeit des jeweils nächsten Frames korrekt ermitteln zu können. Dies würde einem "schnellen Vorspulen" innerhalb der Datei gleichkommen und bei einer maximalen Datenrate für das | + | |
+ | Um die korrekte Position zu finden, müsste die Datei letztendlich also von vorne beginnend durchsucht werden. Jeder Frame müsste gelesen und analysiert werden, um die Abspielzeit des jeweils nächsten Frames korrekt ermitteln zu können. Dies würde einem "schnellen Vorspulen" innerhalb der Datei gleichkommen und bei einer maximalen Datenrate für das Lesen der MP3-Dateien bei z.B. einer 15-minütigen MP3 mit 128 kBit/Sekunde ca. 36 Sekunden dauern - und das nur für einen einzigen Sprung! | ||
Für ein Feuerwerk wäre eine Sprungdauer von unter einer Sekunde vielleicht gerade noch akzeptabel - 36 Sekunden machen diese Methode jedoch absolut unmöglich. | Für ein Feuerwerk wäre eine Sprungdauer von unter einer Sekunde vielleicht gerade noch akzeptabel - 36 Sekunden machen diese Methode jedoch absolut unmöglich. | ||
=== M3D-Format === | === M3D-Format === | ||
Damit das Audiomodul die Informationen über einen Sprung auch nicht vor der Show in der oben genannten Zeit aus den Dateiinformationen auslesen und sich merken muss, wird genau diese Information über die Position der einzelnen Frames innerhalb der Datei im M3D-Format vor die eigentlichen Musikdaten geschrieben. Den MP3-Daten wird also ein aus den Musikdaten berechneter "Bootstrap-Bereich" hinzugefügt, der es ermöglicht jeden Frame innerhalb von unter einer Millisekunde aufzufinden. | Damit das Audiomodul die Informationen über einen Sprung auch nicht vor der Show in der oben genannten Zeit aus den Dateiinformationen auslesen und sich merken muss, wird genau diese Information über die Position der einzelnen Frames innerhalb der Datei im M3D-Format vor die eigentlichen Musikdaten geschrieben. Den MP3-Daten wird also ein aus den Musikdaten berechneter "Bootstrap-Bereich" hinzugefügt, der es ermöglicht jeden Frame innerhalb von unter einer Millisekunde aufzufinden. | ||
− | |||
− | ==== Header === | + | == Format einer M3D-Datei == |
+ | |||
+ | Alle Angaben innerhalb der Datei sind in Big Endian notiert. | ||
+ | |||
+ | |||
+ | === Header === | ||
+ | |||
Vor den eigentlichen Positionsinformationen befindet sich ein Header, der Informationen über die Samplingrate der Audiodaten und ihren eigentlichen Beginn innerhalb der M3D-Datei angibt: | Vor den eigentlichen Positionsinformationen befindet sich ein Header, der Informationen über die Samplingrate der Audiodaten und ihren eigentlichen Beginn innerhalb der M3D-Datei angibt: | ||
Zeile 21: | Zeile 28: | ||
| ID || 4 Byte || Konstant "MP3D" | | ID || 4 Byte || Konstant "MP3D" | ||
|- | |- | ||
− | | MP3-Offset || 4 Byte || Offset der MP3-Daten (Position in Bytes) | + | | MP3-Offset || 4 Byte || Offset der MP3-Daten (Position in Bytes, Zählweise von Null beginnend) |
|- | |- | ||
− | | Sampling-Rate || 2 Byte || Samplingrate der MP3-Daten in | + | | Sampling-Rate || 2 Byte || Samplingrate der MP3-Daten in Samples/Sekunde (44100 oder 48000) |
|- | |- | ||
− | | Frame-Anzahl || 4 Byte || Länge der Datei in Frames | + | | Frame-Anzahl || 4 Byte || Absolute Länge der Datei in Frames |
|- | |- | ||
| (Reserviert) || 2 Byte || Dieses Feld wird z.Zt. nicht benutzt. Bitte für Kompatibilität mit späteren Versionen mit Nullbytes füllen. | | (Reserviert) || 2 Byte || Dieses Feld wird z.Zt. nicht benutzt. Bitte für Kompatibilität mit späteren Versionen mit Nullbytes füllen. | ||
|- | |- | ||
+ | ! Gesamt !! 16 Byte !! | ||
|} | |} | ||
− | + | === Datenbereich === | |
− | Für jeden Frame der MP3-Datei folgt nun seine Position innerhalb der MP3-Datei (also relativ zum Beginn der originalen Audio-Informationen), als 32 Bit-Wert (ebenfalls Big Endian) kodiert. | + | Für jeden Frame der MP3-Datei folgt nun seine Position innerhalb der MP3-Datei (also relativ zum Beginn der originalen Audio-Informationen), als 32 Bit-Wert (ebenfalls Big Endian) kodiert. Über diese Information kann jeder Frame anschließend direkt und genau angesprungen werden. |
− | |||
+ | === Audio-Daten (originale MP3) === | ||
+ | Anschließend wird die originale MP3 1:1 angehängt. Die Byte-Position innerhalb der Datei muss dem Eintrag im Feld MP3-Offset entsprechen (Zählweise ab Null). | ||
Aktuelle Version vom 24. Juni 2012, 23:23 Uhr
Das Audiomodul wäre zwar in der Lage, MP3-Dateien auch ohne Konvertierung abzuspielen, dies bringt jedoch das Problem mit sich, dass bei einer abrupten Änderung der Showzeit (z.B. ein Fortsetzen der Show an einer anderen Stelle nach einer Pause) die exakte Position für die Fortsetzung der Musik innerhalb der Datei nicht angesprungen werden könnte. Daher kann mit dem Audiomodul nur das M3D-Format, eine um zusätzliche Informationen ergänzte MP3-Datei, abgespielt werden. Dieses Format behebt die angesprochene Schwäche des MP3-Formats und erlaubt ein sehr schnelles, wahlfreies Springen innerhalb der Musik auf ca. 50 Millisekunden genau. Eine M3D-Datei kann aus einer MP3-Datei mittels eines Umwandlungstools erzeugt werden.
Inhaltsverzeichnis
Technischer Hintergrund
Aufbau einer MP3-Datei
Eine MP3-Datei besteht aus sogenannten Frames. Jeder Frame enthält Audioinformationen einer bestimmten Länge, beim MPEG 1, Layer 3-Format sind das je nach Sampling-Rate 24 oder 26,1 Millisekunden. Jeder Frame ist (mehr oder weniger) ohne die vorherigen Frames der Datei abspielbar, so dass ein Wiedereinsetzen innerhalb der Datei innerhalb von +/- ca. 25 Millisekunden kein Problem darstellt. Ein größeres Problem ist es, die korrekte Position innerhalb der Datei aufzufinden. MP3-Frames enthalten leider keine absolute Information darüber, an welcher zeitlichen Position innerhalb der Datei sie abgespielt werden müssen. Die Tatsache, dass jeder Frame - je nach Bitrate bei VBR - unterschiedlich lang sein kann, erschwert das Auffinden der korrekten Abspielposition innerhalb der Datei zusätzlich.
Um die korrekte Position zu finden, müsste die Datei letztendlich also von vorne beginnend durchsucht werden. Jeder Frame müsste gelesen und analysiert werden, um die Abspielzeit des jeweils nächsten Frames korrekt ermitteln zu können. Dies würde einem "schnellen Vorspulen" innerhalb der Datei gleichkommen und bei einer maximalen Datenrate für das Lesen der MP3-Dateien bei z.B. einer 15-minütigen MP3 mit 128 kBit/Sekunde ca. 36 Sekunden dauern - und das nur für einen einzigen Sprung! Für ein Feuerwerk wäre eine Sprungdauer von unter einer Sekunde vielleicht gerade noch akzeptabel - 36 Sekunden machen diese Methode jedoch absolut unmöglich.
M3D-Format
Damit das Audiomodul die Informationen über einen Sprung auch nicht vor der Show in der oben genannten Zeit aus den Dateiinformationen auslesen und sich merken muss, wird genau diese Information über die Position der einzelnen Frames innerhalb der Datei im M3D-Format vor die eigentlichen Musikdaten geschrieben. Den MP3-Daten wird also ein aus den Musikdaten berechneter "Bootstrap-Bereich" hinzugefügt, der es ermöglicht jeden Frame innerhalb von unter einer Millisekunde aufzufinden.
Format einer M3D-Datei
Alle Angaben innerhalb der Datei sind in Big Endian notiert.
Header
Vor den eigentlichen Positionsinformationen befindet sich ein Header, der Informationen über die Samplingrate der Audiodaten und ihren eigentlichen Beginn innerhalb der M3D-Datei angibt:
Feld | Länge | Beschreibung |
---|---|---|
ID | 4 Byte | Konstant "MP3D" |
MP3-Offset | 4 Byte | Offset der MP3-Daten (Position in Bytes, Zählweise von Null beginnend) |
Sampling-Rate | 2 Byte | Samplingrate der MP3-Daten in Samples/Sekunde (44100 oder 48000) |
Frame-Anzahl | 4 Byte | Absolute Länge der Datei in Frames |
(Reserviert) | 2 Byte | Dieses Feld wird z.Zt. nicht benutzt. Bitte für Kompatibilität mit späteren Versionen mit Nullbytes füllen. |
Gesamt | 16 Byte |
Datenbereich
Für jeden Frame der MP3-Datei folgt nun seine Position innerhalb der MP3-Datei (also relativ zum Beginn der originalen Audio-Informationen), als 32 Bit-Wert (ebenfalls Big Endian) kodiert. Über diese Information kann jeder Frame anschließend direkt und genau angesprungen werden.
Audio-Daten (originale MP3)
Anschließend wird die originale MP3 1:1 angehängt. Die Byte-Position innerhalb der Datei muss dem Eintrag im Feld MP3-Offset entsprechen (Zählweise ab Null).