Sven Wiegelmann Multimedia Seminar SS 2001
(allgemeiner Vortrag)
30.9.2001
 
 









Audioformate





















Inhalt

1.MIDI
1.1 Allgemeines
1.2 Grundstruktur einer MIDI-Datei
1.3 Kanal Events

2. Sound Module
2.1 *.mod Files

3. AIFF
3.1 Allgemeines
3.2 Aufbau

4. Wave
4.1 Allgemeines
4.2 Struktur

5. Real Audio
Überblick

6. Mp3
6.1 Überblick
6.2 Mp3 Tags

7. VQF
7.1 Überblick
7.2 VQF im Vergleich

8. AAC
8.1 Allgemeines





1. MIDI

1.1 Allgemeines

MIDI = Musical Instruments Digital Interface

Es entstand aus Wünschen der Musiker:

Midi ist im eigentlichen Sinne gar kein Audioformat, da es keine Audiodaten/Klangsamples enthält, sondern ist ein Textformat, welches Steuerdaten für Midigeräte enthält.

1983 in MIDI Spezifikation

Einzige Erweiterung des Standards 1991 GM:

Zur Bearbeitung im Rechner ist eine MIDI-Schnittstelle notwendig. Diese war bei alten Atari Rechnern serienmäßig vorhanden, weswegen auch heute noch diese alten Rechner in Studios verwendet werden. Beim PC kann man ein MIDI-Gerät über den Joystick Port der Soundkarte anschließen, diese birgt aber den Nachteil, daß nur zwei Kanäle zur Verfügung stehen, während man bei einer Standard MIDI-Schnittstelle 16 Kanäle zur Verfügung hat.

Merkmale einer MIDI-Datei:





1.2 Grundstruktur einer Standard-MIDI-Datei

<Standard-MIDI-Datei> := <Header> <Track> [<Track>]...

<Header> := 4D 54 68 64 00 00 00 00 00 xx yy yy zz zz

xx := {00 | 01} Typ der MIDI-Datei:

yy yy := Anzahl der Tracks

zz zz := Zeitbasis:

<Track> := <Track-Header> <Zeitdiff> <Event> [<Zeitdiff> <Event>]...

<Track-Header> := 4D 54 72 6B xx xx xx xx

xx xx xx xx Länge des Tracks in Byte. Der Track-Header zählt nicht mit.

<Zeitdiff> := Zeitdifferenz zwischen den Events:

<Event> := {<Kanal-Event> | <Meta-Event> | <Sysex-Event> }





1.3 Kanal-Events

Ein Kanal-Event ist ein Befehl an einen bestimmten MIDI-Kanal des Wiedergabegerätes. Die allgemeine Syntax lautet:

<Kanal-Event> := [<Status-Byte>] <Daten-Byte> [<Daten-Byte>]

<Status-Byte> := <Event-Typ> <Kanal-Nr.>

<Event-Typ> := {8 | 9 | A | B | C | D | E}    Das erste (führende) Halbbyte des Status-Bytes.

<Kanal-Nr.> := {0 | ... | F}    Das zweite Halbbyte des Status-Bytes.

<Daten-Byte> := {00 | ... | 7F}    Parameter des Befehls.

Eine Kette aus Kanal-Events mit gleichem Status-Byte kann verkürzt werden, indem man das Status-Byte nur im ersten Event setzt und in den folgenden Events wegläßt (sog. Laufzeitstatus). Davon wird praktisch immer Gebrauch gemacht. Da Daten-Bytes < 80 und Status-Bytes >= 80 sind, ist die Kodierung eindeutig.

Event-Typen:

Art des Befehls 1. Halbbyte des Status-Bytes 1. Daten-Byte 2. Daten-Byte
Note ein
Einschalten einer MIDI-Note. Die Note wird so lange gespielt, bis ein passender Befehl "Note aus" eintrifft. 
9 Tonhöhe, numeriert in Halbtonschritten. Im GM-Standard hat c' die Nr. 3C. Bei Schlagzeugen wird die Tonhöhe als ein bestimmtes Schlaginstrument interpretiert.  Anschlagstärke (Velocity),
Wert 00 verboten.
Note aus
Es gibt zwei Möglichkeiten.
9 Tonhöhe 00
8 Tonhöhe Anschlagstärke für das Ausschalten. Wird von den meisten Geräten ignoriert.
Aftertouch
Die Anschlagstärke einer Note wird verändert.
A Tonhöhe, auf die der Befehl wirkt, wenn dort eine Note eingeschaltet ist. Veränderte Anschlagstärke
Regler-Einstellung B Nr. des Reglers. Im GM-Standard gibt es einige vordefinierte Regler, z. B. 00 = Bankauswahl, 07 = Lautstärke, 0A = Stereoposition.  Regelgröße
Klangprogramm
Wahl des Melodie-Instruments oder des Schlagzeugs (Kanal 09). 
C Nr. des Klangprogramms. Die Instrumentenzuweisung ist im GM-Standard festgelegt. Erweiterte Standards verwenden den Regler Bankauswahl für Klangvariationen.  entfällt
Kanaldruck
Ändern der Anschlagstärke aller laufenden Noten im Kanal. 
D Veränderte Anschlagstärke entfällt
Tonhöhenbeugung
Die laufenden Noten werden verstimmt.
E Formel für die Verstimmung (in C-Notierung): 
V = 0x80 * Datenbyte2 + Datenbyte1 - 0x2000
V liegt im Bereich -2000...+1FFF. Dies entspricht standardmäßig einer Verstimmung von -2...+2 Halbtönen. 





2. Sound Module

2.1 *.mod-Files

Sound Module sind das Audioformat des Commodore Amigas (auch des c64)

Sie stellen eine Mischform zwischen MIDI und Wave Dateien dar, da sie sowohl die musikalische Beschreibung der MIDI-Dateien (Noten, Lautstärke, Effekte...) als auch die Klangsamples enthalten.

Sie sind meistens 4-kanalig ausgelegt. Dies hat zur Folge, daß mod-Dateien auf einem PC, welcher ja als 2-Kanal System ausgelegt ist, nur in recht schlechter Qualität abspielbar sind, da die restlichen Kanäle (bis zu 32) von der CPU den 2 vorhandenen hinzugerechnet werden müssen. Da der Amiga als 4-Kanal-System ausgelegt ist, läßt sich auf ihm dennoch eine recht gute Tonqualität erzielen, obwohl die meisten mod-Dateien mit minderwertigen 8-bit Klangsamples hergestellt wurden.





3. AIFF

3.1 Allgemeines

AIFF = Audio Interchange File Format

Das Format wurde ursprünglich von Apple entwickelt (1988) und entspricht dem EA IFF 85 Standard for Interchange Format Files von Electronic Arts

Format wurde auch von anderen Herstellern übernommen z.B. SGI.

Das Format weist eine Chunkstruktur auf (Chunk = Happen, Brocken) wie auch das wave- oder avi-Format. Ein Chunk besteht aus einem Kopfteil und einem Datenteil.

In der ursprünglichen Version war keine Kompression vorgesehen. Erst mit der Erweiterung des Formates zu AIFF-C war es möglich die Daten zu komprimieren, wobei man in der Wahl der Kompressionsart frei war. Die Informationen zur verwendeten Kompressionart wird in einem zusätzlichen Chunk gespeichert.

Merkmale:





3.2 Aufbau

Eine ,,EA IFF 85''´ Datei besteht aus mehreren chunks, die folgenden Aufbau besitzen:

typedef struct {
    ID ckID; /* chunk Typ */
    long ckSize; /* Laenge von ckData in Bytes */
    char ckData[]; /* Daten abhaengig von ckID */
} Chunk;
Der Datentyp ID besteht dabei aus 4 Bytes, deren ASCII Inhalt als Folge von max. 4 Zeichen interpretiert wird. Ein Chunk hat immer eine gerade Anzahl Bytes. Falls ckSize ungerade ist, wird ein 0-Byte am Ende des Chunk eingefügt.

Apple hat alle Chunk Typen für AIFF Dateien festgelegt. Neue Chunk Typen dürfen nur von Apple dem Standard zugefügt werden. Beim Einlesen einer Datei müssen unbekannte Chunk Typen ignoriert werden. Im Falle einer Änderung der ursprünglichen Datei sollten diese auch nicht mehr in die geänderte Datei geschrieben werden.

Das Hauptgerüst einer AIFF Datei stellt der sogenannte FORM chunk dar. Er besitzt folgenden Aufbau:

typedef struct {
    ID ckID; /* = 'FORM' */
    long ckSize;
    ID formType; /* = 'AIFF' */
    char chunks[];
} FormChunk;
Eine AIFF Datei besteht aus genau einem FormChunk, der die weiteren Chunks in chunks in beliebiger Reihenfolge enthält.

Der FormChunk einer AIFF Datei muß genau einen Common Chunk mit folgendem Aufbau enthalten:

typedef struct {
    ID ckID; /* = 'COMM' */
    long ckSize; /* = 18 */
    short numChannels;
    unsigned long numSampleFrames;
    short sampleSize;
    extended sampleRate;
} CommonChunk;

numChannels gibt dabei die Anzahl der Audiokanäle (1 = mono, 2 = stereo, etc.), numSampleFrames die Anzahl der Abtastwerte pro Kanal an. sampleSize gibt die Auflösung der Abtastwerte in Bit (1 bis 32) an. sampleRate ist eine 80-bit Fließkommazahl (IEEE 754 Format), die die Abtastfrequenz angibt.

Falls numSampleFrames im CommonChunk einen Wert größer 0 enthält, muß genau ein Sound Data Chunk mit folgendem Aufbau im Form Chunk enthalten sein:

typedef struct
{
    ID ckID; /* = 'SSND' */
    long ckSize;
    unsigned long offset;
    unsigned long blockSize;
    unsigned char soundData[];
} SoundDataChunk;
Die ersten Abtastwerte der numChannels Kanäle werden direkt hintereinander in soundData abgelegt, gefolgt von den Abtastwerten des nächsten Zeitpunkts. Die einzelnen Abtastwerte bestehen aus 1 bis 4 Bytes je nach Angabe in sampleSize. Bei sampleSize Angaben, die keine Vielfachen von 8 sind, werden die Bits links angeordnet, und die unteren fehlenden Bits mit Nullen aufgefüllt.

Mit offset und blockSize kann erreicht werden, daß die Abtastwerte in soundData an festen Blockgrenzen ausgerichtet werden, um eventuell eine höhere Verarbeitungsgeschwindigkeit zu erreichen. offset gibt dabei die Anzahl zu überspringender Bytes in soundData vor dem ersten Block an, blockSize die Größe eines Blocks in Bytes. Falls keine Blöcke verwendet werden, ist offset und blockSize 0.

Wahlweise können weitere Chunks in den Form Chunk aufgenommen werden, die hier aus Platzgründen nicht näher beschrieben werden können:





4. Wave

4.1 Allgemeines

Das Wave-Format wurde von Microsoft und IBM Anfang der achtziger Jahre entwickelt und wurde das Standard Format in der Windows PC-Welt. So sind zum Beispiel sämtliche Windows System-Klänge im Wave-Format kodiert.

Wave-Dateien enthalten digital kodierte analoge Signale

Dateien sind in Chunks strukturiert

Der Speicherbedarf von Wave-Dateien ist sehr groß, ca. 10MB/min bei Standardparametern (Auflösung 16 bit, 44,1 kHz Samplingrate, Stereo). Durch Variation dieser Werte lassen sich unterschiedliche Dateigrößen und Qualitäten erzielen.

Da kein Qualitätsverlust beim Erstellen einer Wave Datei gegenüber dem Orginal auftritt, ist es immer noch das Arbeitsformat für die Audiobearbeitung.





4.2 Struktur

Das WAV Format von Microsoft basiert wie AIFF/AIFF-C auf dem EA IFF 85 Standard for Interchange Format Files, besteht also auch aus Chunks . Ein wesentlicher Unterschied besteht jedoch in der Anordnung der Bytes (INTEL Anordnung). WAV ist ein Teil des allgemeinen RIFF-Standards (Resource Interchange File Format) von Microsoft. So existieren neben WAV auch Dateien für die Speicherung von Bitmaps, Farbpaletten und 2 Formate für MIDI Daten.

Neue Chunk Typen können nur von Microsoft festgelegt werden. Wie auch bei AIFF und AIFF-C müssen beim Einlesen unbekannte Chunk Typen ignoriert werden.

Wave Chunk

Entspricht dem Form Chunk in AIFF und hat folgenden Aufbau:

typedef struct {
    ID ckID; /* = 'FORM' */
    long ckSize;
    ID formType; /* = 'WAVE' */
    char chunks[];
} WaveChunk;

Eine WAV Datei besteht aus genau einem WaveChunk, der genau einen FormatChunk und dahinter genau einen DataChunk enthält.

Format Chunk

Der Format Chunk besteht aus einem festen und einem variablen Teil:

typedef struct {
    ID ckID; /* = 'fmt ' */
    long ckSize;
    unsigned short wFormatTag;
    unsigned short nChannels;
    unsigned long nSamplesPerSec;
    unsigned long nAvgBytesPerSec;
    unsigned short nBlockAlign;

    /* zusätzlich bei wFormatTag == WAVE_FORMAT_PCM: */
    unsigned short nBitsPerSample;
} FormatChunk;
wFormatTag gibt an, wie die Audiodaten zu interpretieren sind. Derzeit ist nur der Wert WAVE_FORMAT_PCM (1) definiert. Dieser Wert legt fest, welche zusätzlichen Daten im Format Chunk abgelegt sind. Im Fall von WAVE_FORMAT_PCM ist dies nBitsPerSample., welches angibt, mit welcher Auflösung die Abtastwerte vorliegen (max. 16 Bits).

nChannels gibt die Anzahl der Audiokanäle an, nSamplesPerSecond die Abtastrate.

nAvgBytesPerSec und nBlockAlign dienen der Berechnung einer Puffergröße beim Abspielen des Klangs.

Data Chunk

Der Data Chunk enthält die Audiodaten. Wie bei AIFF und AIFF-C werden zunä;chst die Abtastwerte der einzelnen Kanäle abgelegt, dann folgen die Werte des nächsten Abtastzeitpunkts. Bei Größen zwischen 1 und 8 Bits werden die Daten als positive Zahlen interpretiert, bei Auflösungen zwischen 9 und 16 Bit als Zweierkomplement.





5. Real Audio

5.1 Überblick

1995 von RealNetworks (Seattle) als hochkomprimiertes Soundformat für das Internet entwickelt

Obwohl es durch Mp3 immer mehr in den Hintergrund gedrängt wurde, wird es immer noch verwendet , da es streamingfähig ist (eigentliche Datei wird in kleine Pakete zerlegt und separat verschickt und ist daher in Echtzeit vom Server abspielbar), was mit Mp3 zur Zeit noch nicht möglich ist.

Wird aufgrund der Streamingfähigkeit für Internetradio und andere Liveübertragungen verwendet.

Die Qualität ist abhängig von der Bandbreite, die zur Verfügung steht. Das heißt, je weniger Bandbreite zur Übertragung zur Verfügung steht, desto niedriger ist die Qualität der übermittelten Version. Sollte die Bandbreite unter ein Minimum fallen (< 14kB/s), so werden einfach Pakete ausgelassen. Was zur Folge hat, daß ab etwa 15% fehlender Pakete eine menschliche Stimme wie ein Roboter klingt.





6. Mp3

6.1 Überblick

MPEG 1 Layer 3

Entwickelt vom Frauenhofer Institut für integrierte Schaltungen in Erlangen

Spezifiziert als Sonderform des MPEG-Videoformats.

Hat sich in kürzester Zeit zum Standardformat für Musik im Internet etabliert.

Enorm hohe Kompressionsrate wird erreicht durch gezielte Ausblendung von, für das menschliche Ohr kaum hörbaren, Elementen und Transformationscodierung mittels FFT (Fast Fourier Transformation) und DCT (Discrete Cosinus Transformation). Die dadurch erzielte Dateigröße liegt bei einer Abtastung von 128 kB/s und einer Samplingfrequenz von 44,1 KHz bei 1 MB/min.

Es sind wahlweise konstante oder variable Bitraten möglich. Bei variabler Bitrate zur Abtastung, wird in Bereichen großer Dynamikschwankungen, geringer Stereotrennung (gleiche Signale für beide Kanäle) oder auch Pausen im zu kodierenden Stück mit weniger Bits abgetastet, während an Stellen mit feinen Dynamikschwankugen oder hoher Stereotrennung die Auflösung der Abtastwerte hochgefahren wird. Dies bewirkt eine geringe Einsparung an Speicherplatz, bringt aber auch einige Probleme mit sich. So kann der Player nicht mehr die exakte Länge des Stücks ermitteln und Sprünge innerhalb des Stücks können mitunter nicht exakt ausgeführt werden, was zur Folge hat, daß diese Form der Kodierung recht selten angewandt wird, da der Gewinn an Speicherplatz zu gering ist, als daß man diese Nachteile in Kauf nehmen würde.

CD vs. Mp3:


Aufgrund dieser Eigenschaften ist Mp3 für Klassische Musik nicht so sehr geeignet, aber für aktuelle Populämusik sind die Ergebnisse mehr als akzeptabel, wobei dies auch immer auch immer vom subjektiven Eindruck und Qualitätsanspruch abhängt.





6.2 Struktur von MP3-Tags

Tags in MP3-Dateien können die Informationselemente Titel, Künstler, Album, Jahr, Kommentar und Genre des Musikstücks enthalten. Sofern vorhanden, befinden sich die Tags am Ende der Audiodatei und sind nach dem ID3v1-Standard exakt 128 Bytes lang. Der Aufbau ist wie beim Frame-Header exakt festgelegt: Die ersten drei Bytes sind für die Zeichenfolge "TAG" reserviert, um den Anfang zu definieren. Insgesamt sind die 128 Bytes wie folgt eingeteilt:

Diese Tags werden von jedem MP3-Player gelesen und bei der Wiedergabe angezeigt. Das neuere und erweiterte Tag-Konzept (ID3v2) umgeht das 128-Byte-Limit, verlegt die Tags an den Anfang der Datei und erlaubt einen theoretischen Umfang von bis zu 256 MB. Hier lassen sich dann etwa Songtexte oder Bilder der Künstler einbinden.

Da die ID3v2-Tags mit den älteren ID3v1-Tags nicht kollidieren und problemlos nebeneinander existieren können, sind keinerlei Probleme zu befürchten, wenn Sie "klassische" Tags anlegen oder ändern, obwohl gleichzeitig erweiterte Tags bestehen.





7. VQF

7.1 Überblick

Von Yamaha entwickeltes Soundformat.

Erschien kurz nach Mp3 (1995).

Auch bekannt als SoundVQ oder TwinVQ.

Algorithmus beruht auf Vektorquantisierung. Aufgrund der Ähnlichkeiten der Elemente in Musikstücken ist es möglich, diesen "Standardbausteinen" einen Index zuzuweisen, der einem Eintrag in einer Bitmustertabelle entspricht. Diese Tabelle kann mehrdimensional aufgebaut sein, wobei der Index dann einem Vektor entspricht. Der Dekoder besitzt die gleiche Mustertabelle und kann aus den Indexen (Vektoren) die komplette Bitstruktur wieder zusammensetzen.

Dateigröße:

Die maximale Abtastrate liegt bei 96 kB/s.

Die allgemeine Ausrichtung liegt eher auf hoher Kompression als auf High-End Audioqualität. Dies macht das Format vor allem für Benutzer interessant, die großen Wert auf Platzersparnis legen oder über geringe Bandbreite verfügen. Allerdings ist es unwahrscheinlich in Zeiten, da Festplatten immer billiger werden und die Bandbreiten immer größer, daß sich das Format gegen Mp3 als Standard durchsetzen kann.

Player/Encoder:

Soundqualität:

Nachteile:





7.2 YQF im Vergleich

Format
Länge
Größe
Kodierzeit
Wave
3,31 min
35,5 MB
-
Mp3
||
3,22 MB
16 s
VQF
||
2,01 MB
46 s

Einstellungen:

Testrechner und Encoder:





8. AAC

8.1 Allgemeines

AAC = Advanced Audio Coding

Entwickelt von Dolby Laboratories, AT&T, Sony und dem Frauenhofer Institut.

Standardisiert als Erweiterung zu MPEG 2 und als Teil von MPEG 4.

Verglichen mit Mp3 ergibt sich die gleiche Qualität bei halber Dateigröße.

Schon bei ISDN-Bandbreite (64 kB/s) gute Stereoübertragung möglich

Beruht auf verbessertem Mp3-Algorithmus

Aufgrund der geringen benötigten Bandbreite, liegt es nahe die Technik auch für die Übertragung von Sprache in Telefongesprächen einzusetzen. Dies war bislang nicht möglich, da die Zeit, welche zum Kodieren und anschließenden Dekodieren benötigt wurde bei ca. 100 ms lag, wozu noch die Zeit hinzugerechnet werden muß, die für die Übertragung benötigt wird.

Durch die Etnwicklung von AAC-LD (Low Delay) im Sommer 2001 ist es gelungen die Kodier- Dekodierzeit auf <=20 ms zu senken. Hiermit ist es möglich, eine bisher nicht gekannte Sprachqualität für Telefogespräche zu erreichen. Diese Entwicklung wurde in der Fachpresse als Durchbruch vergleichbar mit der Erfindung des Farbfernsehens angesehen.