VOC (Audiocodec)
# VOC (Audiocodec)

Creative Voice, Dateinamenserweiterung .VOC (in DOS-üblicher 8.3-Schreibweise) bzw. .voc, ist ein Audioformat für digitale Audiodaten für die in den 1990er-Jahren entwickelten Sound-Blaster-Soundkarten von Creative Labs.

Das Format war anfangs auf 8-Bit-Audio beschränkt und wurde mit dem Sound Blaster 16 auf 16-Bit-Audio erweitert (Containerformat). Die Audiodaten sind in Little Endian meist mit PCM oder mit ADPCM kodiert.

## Aufbau

### Original-Format (8-Bit)

Das Dateiformat besteht aus einem 26-Byte großen Header und einer Reihe darauffolgender Datenblöcke, die die Audioinformation enthalten. Die Byte-Reihenfolge ist Little Endian.

VOC-Header :

| Offset (hex) | Länge (in Byte) | Inhalt |
| - | - | - |
| 0x00 | 19 | ASCII-Zeichenfolge Creative Voice File |
| 0x13 | 1 | EOF: 1A (hexadezimal) |
| 0x14 | 2 | Offset für ersten Datenblock: 1A 00 (hexadezimal) |
| 0x16 | 2 | Version (Major, Minor), hexadezimal; Beispielsweise: 0x010a, Version 1.10 |
| 0x18 | 2 | Validierung: Versionsnummer + 0x1234, hexadezimal; Beispielsweise: 0x1129 |

Auf den Header folgen Datenblöcke. Jeder Datenblock beginnt mit einem Typ-Byte, das den Inhalt der Daten beschreibt, gefolgt von 3 Bytes für die Größe der Daten (als Integerzahl). Bei zwei der 9 definierten Typen fehlt die anschließende Größe der Daten, sodass der Block schließlich nur aus einem einzigen Byte besteht – diese sind 0x00, der Terminator, und 0x07, das Wiederholungsende.

Ist eine Größe angegeben, so folgt den ersten 4 Bytes ein Block des Inhalts, der sich aus dem angegebenen Typ ergibt, mit der angegebenen Größe.

VOC-Datenblock :

| Typ (hex) | Typ-Beschreibung | Typ-Beschreibung | Größe (3-Byte-Integer) | Info |
| - | - | - | - | - |
| Typ (hex) | engl. | deu. | Größe (3-Byte-Integer) | Info |
| 0x00 | Terminator | Trennzeichen | – | – |
| 0x01 | Sound data | Audiodaten | 2+Größe der Daten | Audioinhalt Offset Beschreibung Bedeutung 0x00 Abtastrate 256-(1000000/Sample rate) 0x01 Codec siehe Tabelle wird ignoriert, wenn davor ein Block des Typs 0x08 (Extra info) einen Codec definiert (ab Version 1.20, neues 16-Bit-Format) ab 0x02 Audiodaten im angegebenen Format (Codec) |
| 0x02 | Sound continue | weitere Audiodaten | Größe der Daten | weitere Audiodaten im selben Format wie der vorherige Block |
| 0x03 | Silence | Stille | 3 | Stille Offset Beschreibung Bedeutung 0x00-01 Länge der Stille in der Einheit der Abtastrate Integer-1 0x02 Abtastrate wie bei Audioinhalt |
| 0x04 | Marker | | 2 | Markernummer (2 Bytes) Der jeweils letzte Marker bleibt beim Abspielen in einem Zwischenspeicher und kann wieder angesprungen werden. |
| 0x05 | ASCII string | ASCII-Zeichenkette | Länge der Zeichenkette | Null-terminierte Zeichenkette |
| 0x06 | Repeat | Wiederholen | 2 | Anzahl an Wiederholungen (2-Byte-Integer) 0x0000 bis 0xFFFE für 1–65.535 Wiederholungen, 0xFFFF für unendlich |
| 0x07 | End repeat | Ende der Wiederholung | – |

Die Datei endet optional mit dem Terminator-Block (Datenblock des Typs 0x00).

### 16-Bit-Formaterweiterung

Um das bestehende Format auf 16-Bit zu erweitern wurde für den Datenblock ein neues Typ-Byte eingeführt: 0x09. Die Version im Header muss dabei 1.20 (Hexadezimal 0x0114) oder neuer sein.

Erweiterer VOC-Datenblock :

| Typ (hex) | Typ-Beschreibung | Typ-Beschreibung | Größe (3-Byte-Integer) | Info |
| - | - | - | - | - |
| Typ (hex) | engl. | deu. | Größe (3-Byte-Integer) | Info |
| 0x08 | Extra info | Zusätzliche Information | 4 | Audioinhalt Offset Beschreibung Bedeutung 0x00-01 Frequenz-Divisor 256000000/(nb_channels * (65536 - frequency_divisor)) 0x02 Codec Ersetzt Codec-Informationen in allen auf diesen Block folgenden Audiodaten(blöcken) 0x03 Kanäle nb_channels = Anzahl -1, Beispiel: 2 Kanäle → 0x01 |
| 0x09 | Sound data (new format) | Audiodaten im neuen Format | 12 + Größe der Daten | Audioinhalt Offset Beschreibung Bedeutung 0x00-03 Abtastrate 0x04 Bits pro Sample 0x05 Kanäle 0x06-07 Codec siehe Tabelle 0x08-11 reserviert ab 0x12 Audiodaten im angegebenen Format (Codec) |

### Codecs

Audioinhalt :

| Codec-ID (hex) | Kodierung, Kompression, Codec | Block-Typ |
| - | - | - |
| 0x00 | 8 Bits unsigned PCM | Original (0x01, 0x02) und Neu (0x09) |
| 0x01 | 4–8 Bits Creative ADPCM | Original (0x01, 0x02) und Neu (0x09) |
| 0x02 | 3–8 Bits Creative ADPCM (2,6 Bits) | Original (0x01, 0x02) und Neu (0x09) |
| 0x03 | 2–8 Bits Creative ADPCM | Original (0x01, 0x02) und Neu (0x09) |
| 0x04 | 16 Bits signed PCM | ab Version 1.20; Original (0x01, 0x02) und Neu (0x09) |
| 0x06 | A-law | ab Version 1.20; Original (0x01, 0x02) und Neu (0x09) |
| 0x07 | μ-law | ab Version 1.20; Original (0x01, 0x02) und Neu (0x09) |
| 0x0200 | 4–16 Bits Creative ADPCM | nur neues erweitertes Format (ab Version 1.20; 0x09 und 0x02) |

## Verwendung

Creative-Voice-Dateien fanden in diversen DOS-Spielen Verwendung, wenn diese für die Audioausgabe Sound-Blaster-Karten verwenden konnten, beispielsweise Eye of the Beholder.

Die Verbreitung des Dateiformats verschwand zusehends mit dem Aufkommen von RIFF WAVE, welches in Windows von Microsoft bereits vom Betriebssystem unterstützt wurde. Für das Creative-Voice-Dateiformat mussten hingegen zusätzliche Abspielprogramme installiert werden, die bei den Treibern für die Sound-Blaster-Karten mitgeliefert wurden. Mit dem Aufkommen von AC’97 setzte sich WAVE, Dateiendung .WAV, schließlich durch.

