Audiodatenformate Ein kleiner Überblick Über die gängigen Audiodatenformate Gliederung 1) Überblick/Entwicklungsskizze 2) Ausgewählte Formate im Detail Unkomprimierte * SND- Format * WAV (PCM) bzw. AU Format * AIFF Format Komprimierte * AIFF-C * MOD * (MIDI- Format) 3) Vergleich 4) Audiodatenübermittlung (ADAT) 1) Überblick/ Entwicklungsskizze Im Laufe der Entwicklung der Soundformate haben sich viele unterschiedliche Verfahren der Soundformatierung herauskristallisiert. Dabei tauchen viele mehr oder weniger bekannte Namen für Soundformate auf: RIFF, EAIFF 85, SND, AESEBU, WAV,ADAT,VOC,AU,AIFF-C,MOD,... Allerdings sind sich viele dieser Formate und Namen sehr ähnlich oder Weiterentwicklungen von Vorgängern. So gibt es zum Beispiel die große Gruppe Chunkformate. Diese Formate gliedern ein Musikstück in einzelne Samples, die meist in einem Data Chunk gespeichert werden. Zusätzlich gibt es dann noch ein paar weitere Chunks, die die Formatierung und andere anwendungsspezifische Dateninformationen des Musikstücks enthalten. Der Ausgangspunkt dieser Entwicklung war das EA IFF 85-Format von Electronic Arts. Sowohl Microsoft als auch Apple benutzten die Struktur dieses Formates um eigene Soundformate zu entwickeln. Das erste Format von Microsoft, das dem EA IFF 85 Standart entsprach war das RIFF- Format, aus dem später für das Betriebssystem Windows das WAV- Format wurde. Parallel dazu gab Apple fast zeitgleich ebenfalls einen Standart für Audiodaten heraus. Genauso wie das RIFF- oder das WAV- Format weist auch das AIFF- Format, dass später zum AIFF-C- Format weiterentwickelt wurde, kaum Veränderungen zum ursprünglichen EA IFF 85-Format auf. Beide Firmen haben im Grunde diesen Standart in einen eigenen umgewandelt, um sich dann mit ihrem Audioformat durchzusetzen. In die gleiche Richtung arbeitete auch die Firma Sun. Sie stellt auf diesem Sektor der Audioformate das SND- Format zur Verfügung. Neben all diesen Chunkformaten gibt es aber auch noch eine Reihe weiterer Formate, die zum Teil auf ganz anderen Überlegungen basieren. Dazu gehört zum Beispiel das Audioformat Mod. Dieses Format verwendet ein ganz anderes Prinzip. Anstatt das gesamte Musikstück in einzelne Samples zu zerlegen, werden hier nur die Samples der Instrumente abgespeichert und die "Partitur" des Musikstücks. Das heißt, dass man hier nicht einfach das Musikstück in Abschnitte unterteilt, sondern es mehr inhaltlich gliedert. Beide Verfahren haben Vor- und Nachteile, die später noch erörtert werden. In die gleiche Richtung wie das Mod- Format geht auch das MIDI- Format. Nur das bei diesem Musikformat nicht einmal mehr die Samples der Instrumente abgespeichert werden, sondern nur noch Nummer. Durch diese Nummern werden dann über die Hardware die Instrumente abgespielt. In letzter Zeit ist ein weiterer wichtiger Faktor neben der Wahl des reinen Audioformates bei der Speicherung von Audiodaten hinzugekommen. Dies ist die Möglichkeit der Audiokomprimierung. Und je nach Audioformat sind die Komprimierungsmöglichkeiten mehr oder weniger erforderlich oder machbar. Aufgrund der vielen verschiedenen Audioformate gehen wir im zweiten Teil nur exemplarisch auf einige ein. 2) Ausgewählte Formate im Detail Das SND Format Das SND- Format wird hauptsächlich bei NeXT und Sun verwendet. Dieses Format ist häufig in eine Standartbibliothek (z.B. Sound Kit) eingebunden, wodurch die Bearbeitung des Klanges ohne weitere Kenntnis vom inneren Aufbau einer SND- Datei möglich ist. Die Audiodatei besteht aus zwei Blöcken. Zum einen ist da der Kopf (SND Sound Struct) und zum anderen sind dort die Datensamples. Der SND Sound Struct ist wie folgt aufgebaut: Aufbau in C Syntax typedef struct { int magic; /*magic number SND_Magic*/ int dataLocation; /*offset or pointer to the data*/ int dataSize; /*number of bytes of data*/ int dataFormat; /*the data format code*/ int samplingRate; /*the sampling rate*/ int channelCount; /*the number of channels*/ char info[4]; /*optional text information*/ }SNDSoundStruct; Wie man sieht, besteht der Dateikopf aus einigen Integervariablen und einem zusätzlichen Infotext ( char info[4]). Die Variable magic ist eine interne Verwaltungsnummer ohne weiteres Interesse für den Benutzer. Bei den anderen Variablen sieht das etwas anders aus. So kann man mit Hilfe der weiteren fünf Variablen die Größe oder die Samplingrate oder die Anzahl der Kanäle festlegen. Das heißt, dass in diesen fünf Variablen sämtlich Formatierungsinformationen über das Musikstück enthalten sind. Mit Hilfe dieser Informationen kann der Datenrumpf der Sounddatei geordnet und verarbeitet werden. Ohne diesen Kopf sind die restlichen Daten dieses Formates also völlig unbrauchbar. Das WAV- Format Das Wav- Format ist vom Prinzip sehr ähnlich aufgebaut. Es besteht aus einer Reihe sogenannter Chunks, die die gesamte Information über das Audiostück beinhalten. Dabei kann man zunächst einmal zwischen notwendigen und optionalen Chunks unterscheiden. Es gibt drei Chunks, die in jeder Datei vom WAV- Format enthalten sein müssen. Dies ist der Form- , der FMT-, und der Data- Chunk. Diese drei Chunks bilden das Grundgerüst der Datei. Alle weiteren Chunks, wie zum Beispiel der PlayList- Chunk sind optional. Wie sehen die drei notwendigen Chunks aus: Da ist zunächst einmal der Form- Chunk. Dies ist der sogenannte Wave- Chunk, der alle weiteren Chunks und deren Informationen enthält. Dann ist da der FMT- Chunk. Das ist der Chunk, der in Information über die Soundformatierung beinhaltet. Dieser Chunk enthält sämtliche notwendigen Paramater der Audiodaten. So muss man in ihm den Formattyp angeben. Damit ist in diesem fall Mono oder Stereo gemeint. Außerdem werden hier die Informationen über die Kanalanzahl, beschränkt auf ein oder zwei Kanäle, die Samplerate, festgehalten in Samples pro Sekunde, die Byterate, die bei der Bemessung des Audiopuffers beim Abspielen hilft, die Bytes pro Sample, das ist die Größe eines Samples, und die Bits pro Sample festgehalten. In C sieht der Format- Chunk so aus: Typedef struct { ID ckID; /*= Format */ long ckSize; unsigned short wFormatTag; /*= WAVE_FORMAT_PCM */ unsigned short nChannels; unsigned long nSamplesPerSec; unsigned long nAvgBytesPerSec; unsigned short nBlockAlign; unsigned short nBitsPerSample; }FormatChunk Der Data- Chunk enthält dann ausschließlich die Audiodaten. Die einzige Zusatzinformation, die dort mit untergebracht ist, ist die, ob der Audiodatenblock komprimiert ist. Falls das unkomprimierte PCM- Aufzeichnungsformat verwendet wird, sind außer den reinen Audiodaten keinerlei weitere Informationen im Data- Chunk. Falls man keine Audiodatei im PCM- Aufzeichnungsformat vorliegen hat, muß in der datei noch ein weiterer Chunk vorhanden sein. Dies ist der Fact- Chunk, der dann alle Angaben zum jeweiligen Aufzeichnungsformat enthält. Zusätzlich zu diesen vier Chunks gibt es noch viele weitere Chunks, in denen zusätzliche Information untergebracht werden können. So gibt es zum Beispiel den CuePoint- Chunk, der eine liste von Markierungen enthält, oder den AssocDataList-Chunk, der eine Liste anwendungsspezifischer Daten beinhaltet. Aber all dies Chunks müssen nicht in jeder Datei dieses Formates vorkommen. Sie sind lediglich optional zur Erweiterung der Dateninformation zu verwenden. Das AIFF- Format Wie schon in der Einleitung erwähnt besteht zwischen dem AIFF- Format und dem WAV- Format kein wesentlicher Unterschied. Beide sind Weiterentwicklungen des EA IFF 85 Standart. So setzt sich auch dieses Format aus einer Reihe von Chunks zusammen. Auch hier gibt es wieder einige notwendige Chunks, die in jeder Datei enthalten sein müssen und eine Menge zusätzlicher Chunks, die optional verwendet werden können. Auch hier gibt es den Form- Chunk, der alle weiteren Chunks in beliebiger Reihenfolge enthält, den Common- Chunk, der wie der FMT- Chunk des WAV- Formates alle wichtigen Parameter der Audiodaten beinhaltet, und den Sound Data- Chunk mit den Musikdaten. Alle weiteren Chunks, wie der Marker- Chunk, der die Kennzeichnung mehrerer Zeitpunkte innerhalb der Abtastwerte ermöglicht, oder der Instrument- Chunk, der zur Erzeugung digitalisierter Instrumentenklänge verwandet wird, speichern zusätzliche Informationen und sind nicht zwingend in jeder Audiodatei vom AIFF- Format notwendigerweise vorhanden. Auch hier stellen wir die Syntax des Common- und des Sound Data Chunks einmal in C vor: Der Common Chunk typedef struct { ID ckID; /* =COMM */ long ckSize; /* =18*/ short numChannels; unsigned long numSampleFrames; short sampleSize; extended sampleRate; } CommonChunk Der Sound Data Chunk typedef struct { ID ckID; /* = SSND*/ long ckSize; unsigned long offset; unsigned long blockSize; unsigned char soundData [ ]; } SoundDataChunk Das AIFF-C- Format Dieses Format ist eine Erweiterung von AIFF zur Verwendung von komprimierten Klangdaten. Während bei AIFF die Samples nur in unkomprimierter Form vorliegen dürfen, kann man bei AIFF-C auch komprimierte Audiodaten verwenden. Der grundsätzliche Dateiaufbau bleibt dabei aber erhalten. Das Chunksystem bleibt völlig unverändert. Auch der Form- Chunk hat den gleichen Aufbau wie bei AIFF. Der einzige Unterschied besteht im Inhalt des Formtyps, der jetzt AIFC heißt. Außerdem muss er genau einen Format Version Chunk enthalten. Der Commen- Chunk wurde im Vergleich zu AIFF um zwei Angaben erweitert: ID compressionType Pstring compressionName Diese beiden Einträge bestimmen die Kompressionsart. Im Sound Data Chunk folgen dann die komprimierten Daten der einzelnen Kanäle immer hintereinander, jeweils gefolgt von den Daten des nächsten Zeitintervalls. Das bedeutet, der einzige Unterschied zwischen AIFF und AIFF-C ist der der Möglichkeit der Komprimierung. Das ist aber ein ganz wesentlicher Fortschritt. Denn als die Digitalisierung von Musik anfing, machte man sich zunächst noch wenig Gedanken über den Speicherplatz, den man dabei verbrauchte. Doch schon sehr bald wurde das zu einer Kernfrage bei der Wahl der Audiodatenformate. Man bekam sehr schnell sehr große Datenmengen und suchte nach Auswegen diese zu Verringern. Dabei ist ein Mittel die Komprimierung von Audiodaten. Allerdings treten dort nicht unerhebliche Probleme auf. Denn zunächst einmal sind diese Verfahren unwahrscheinlich komplex. Außerdem nimmt man bei der Komprimierung einen Datenverlust in Kauf und damit kommt es sehr schnell zu einem Qualitätsverlust. Aber diese Probleme und wie man sie minimieren kann sind ein eigenes Thema. Wichtig ist nur, das AIFF-C diese Möglichkeit der Datenkomprimierung überhaupt zur Verfügung stellt. Das MOD- Format Diese Audioformat unterscheidet sich ganz entscheidend von den bisher genannten. Während man bei allen bisher vorgestellten Audioformaten das Musikstück in einzelne Sample zerteilt und diese dann abspeichert. Das MOD- Format funktioniert hier grundlegend anders. Hier wird nicht einfach nur ein Musikstück gesampelt, sondern "inhaltlich" gegliedert. Das bedeutet, dass in der Datei mehrere kurze Samplings stehen, die jeweils ein Musikinstrument darstellen. Zusätzlich wird die "Partitur mit Noten" abgespeichert. Das Verfahren bedeutet natürlich einen hohen Produktionsaufwand, da man vorhandene Musikstücke nicht einfach digitalisieren kann. Außerdem ergibt sich auch ein Bearbeitungsproblem. Allerdings gibt es auch eine Reihe von Faktoren, die für dieses Format sprechen. So verringert diese Art der Datenverwaltung die Datenmenge immens, denn es müssen ja "nur" die Instrumente und nicht das ganze Stück als Sample abgespeichert werden. Der Aufbau des MOD- Formates: Pos Länge Typ Beschreibung 1 20 Char Titel des Liedes 21 22 Char Name des 1. Samples 43 2 BigEnd Länge des Samples 45 1 Snibble Tonhöhe 46 1 Byte Lautstärke 47 2 BigEnd Tonanzahl 49 2 BigEnd Tonlänge 51 30 2.Sample . . . 921 30 31.Sample 951 130 Partitur 1081 4 Char Fileformat Tag Bis zur Position 20 ist der Titelname untergebracht. Falls dieser kürzer falls zwanzig Zeichen sein sollte, wird der Rest mit Nullen aufgefüllt. Danach werden bis zu dreißig Samples abgespeichert. Diese Samples sind die einzelnen Instrumente. Das bedeutet, dass nicht mehr als dreißig verschiedene Instrumente bei einem Musikstück im MOD- Format benutzt werden können. Die Tonhöhe der einzelnen Instrumente ist in achtel Halbtonschritten variierbar. Sämtliche Information wann wie welches Instrument einzusetzen ist, sind in der "Partitur" festgehalten. Das Midi Format Dieses Format ist dem MOD Format vom Prinzip her sehr ähnlich. Der Aufbau ist entspricht genau dem vom MOD Format, nur das hier die Sample der einzelnen Instrumente fehlen. Statt der Informationen über die einzelnen Instrumente sind bei diesem Format dort nur Nummer verzeichnet. Die entsprechenden Instrumentinformationen zu den Nummer müssen dann in einer speziellen Software oder auf der Hardware realisiert werden. Der Vorteil davon ist natürlich, dass das MOD Format unheimlich "klein" ist, weil keinerlei Samples untergebracht werden müssen. Andererseits ist eine getreue Wiedergabe des Musikstücks fast nicht möglich, da häufig die genauen Instrumentdefinitionen nicht vorhanden sind und jeder Hersteller solcher Instrumentensamples etwas anders gestaltet. 3) Der Vergleich Die unterschiedlichen Dateiformate sind nur schwer vergleichbar. Auf der einen Seite sind die Chunkformate, die ganze Musikstücke zerteilen und die einzelnen Teile als Samples abspeichern. Das bedeutet natürlich einen erheblichen Speicheraufwand. Allerdings klingen diese Sounddateien auch immer überall gleich und besitzen eine sehr hoher Qualität. Wenn man diese Musikstücke versucht zu komprimieren, verlieren sie allerdings häufig an Qualität. Format wie MOD oder MIDI sind sehr speichersparend. Dafür hat man Probleme bei der Wiedergabe der Stücke, da die Instrumentensample zum Teil nicht mit abgespeichert werden. Außerdem kann man im Grunde kein Gesang in solchen Formaten abspeichern, da sich die Stimme nicht wie ein einfaches Instrument sampeln läßt. Aber gerade bei neueren Musikstilen wie Techno sind solche Formate eine echte Alternative. Man sieht also, dass man nicht von vornherein sagen kann, ob das eine oder andere Format das bessere ist. Je nach dem wie viel Speicherplatz man zur Verfügung hat oder welche Art von Musik man bevorzugt, bieten sich immer andere Formate an. Interessant ist allerdings schon der große Unterschied beim Speicheraufwand zwischen den Chunkformaten und MOD/MIDI. Eine Stunde aufgezeichneter Musik mit 16bit und 44kH benötigt unter der Vorraussetzung, dass diese Musik in CD-Qualität wiedergegeben werden soll, im WAV- oder AIFF- Format ca. 600 MB. Im MOD Format erreicht man zwar keine CD-Qualität, aber man benötigt auch nur etwa ein Zehntel an Speicherplatz. Bei MIDI ist man dann schon bei nur 200KB angekommen. Allerdings kann man hier auch beim besten Willen nicht mehr von CD-Qualität sprechen. Wenn man sich den Speicherverbrauch und die Qualität der Wiedergabe der einzelnen Formate ansieht, dann versteht man auch, warum man zur Zeit so interessiert daran, ist die Audiodaten zwar als Ganzes zu sampeln, danach aber so zu komprimieren, dass man ohne spürbaren Qualitätsverlust mit einem Bruchteil des ursprünglichen Speicherbedarfs auskommt. Ein Weg in diese Richtung ist das MP3- Format. 4) Audiodatenübermittlung Ein weiteres Problem in der digitalen Verarbeitung von Audiodaten ist die Übermittlung. Da bereits kleinste Bitänderungen bei einer Datenübertragung von Audiodateien große Wirkungen haben können, muss man hier besonders genau sein. Wenn man digitale Audiodaten möglichst ohne Informationsverlust übertragen will steht man vor drei grundsätzlichen Problemen: 1) Entfernung 2) Taktfrequenz 3) Kanalmenge Denn wenn man zum Beispiel zwei leicht differierende Taktfrequenzen hat, kann es bei sehr langen Bitströmen vorkommen, dass sich die Bits um ein zwei Bit verlagern. Das kann immer dann geschehen, wenn lange Folgen von gleichbleibenden Bits auftreten. Das führt aber bei Audiodatenübermittlung zu großen Problemen, weil so zum Beispiel Informationen verschiedener Audiokanäle durcheinander geraten können. ADAT ist eine Form der Datenstromkodierung, die diese Probleme beseitigt. Aber wie funktioniert ADAT? Ganz einfach! Zunächst zerlegt man den Audiobitstrom in die Informationen der einzelnen Kanäle. Acht Kanäle sind dabei zugelassen. Dann zerteilt man wiederum die Information eines Kanals in Blöcke von je 24Bit. In diesen 24Bit wird sechsmal, jeweils nach vier Bit, ein 1Bit eingefügt. Die so veränderten Bitströme á 30 Bit der einzelnen Kanäle werden dann aneinandergehängt. Dann kommen an den Anfang der Bitkette noch vier User Bit, denen wieder ein 1Bit folgt, und am Ende noch zehn 0 Bits, wiederum gefolgt von einem 1 Bit. Das macht zusammen genau 256 Bits, in denen die Audioinformationen von acht Kanälen übertragen werden. Durch dieses Verfahren ist eine lange kette gleichbleibender Bits unmöglich geworden. Dadurch wird die genaue Übertragung der Informationen ermöglicht. Grafische Anschauung eines Kanals: 1 1 1 1 1 Grafische Anschauung des 256 Bit Blocks: Userbits acht Kanäle Nullbits Zum Abschluss noch ein kleines Beispiel, bei dem jeder Kanal auf ein Vierbitblock reduziert wird, die Userbits weggelassen und nur vier Kanäle verwendet werden. Auf allen Kanälen werden nur Nullen gesendet: 0000 Kanal1 0000 Kanal2 0000 Kanal3 0000 Kanal4 00001000010000100001 Die vier Kanäle mit je einem1 Bit dazwischen 0000100001000010000100000000001 Im ADAT Format mit den Nullbits 0000111110000011111000000000001 Das Format einfach kodiert