M3D-Format: Unterschied zwischen den Versionen

Aus PyroNeo Wiki
Zur Navigation springenZur Suche springen
K
K (Header)
Zeile 29: Zeile 29:
 
| (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 !!
 
|}
 
|}
  

Version vom 2. Juli 2011, 13:19 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 Störung (Stromausfall etc) 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 wahlfreies Springen innerhalb der Musik auf ca. 25 Millisekunden genau.

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. Die Frames enthalten keinerlei 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. 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)
Sampling-Rate 2 Byte Samplingrate der MP3-Daten in s/Sek (44100 oder 48000)
Frame-Anzahl 4 Byte 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.