
VOC - Dateien :

HEADER
======

Bytes(Offset)  Groesse in Bytes   Beschreibung
00h-13h    20      String "Creative Voice File"+1Ah
          (Kennung des VOC - Formats)
14h-15h    2      Datenblock - Offset ( Anfang des ersten
          Datenblocks) relativ zum Anfang der
          Datei, ueblicherweise der Wert 001Ah
          (dez. 26)
16h-17h    2      Versionsnummer des VOC - Formats
          HB : Versionsnummer LB:Unterversionsnr.
18h-19h    2      Identifikationscode ( Check - Code )
          ueblicherweise 1129h

DATENBLOCK
==========

Der gesamte Datenblock einer VOC - Datei kann aus beliebig vielen Unterbloecken
bestehen. Jeder Unterblock , ausser dem sog. Terminator Block, beginnt mit
einem Byte, in dem die Blockart abgespeichert wird ( BLKTYPE - Byte).
Die Bytes 01h-03h enthalten die Laenge des Unterblocks (BLKLEN - Bytes)
Die Reihenfolge, in der die Bytes abgespeichert sind ist folgende :
niederwertiges, mittleres, hoeherwertiges Byte.

Die Blocklaenge berechnet sich folgendermassen :
Blocklaenge = Byte1 +256 * Byte2 + 65536 * Byte3

Beachte : BLKTYPE und BLKLEN zaehlen nicht zur Blocklaenge mit !
Real ist der Unterblock also 4 Byte groesser !
Nach den BLKLEN - Bytes kommen Daten, die fuer die einzelnen Blocktypen
unterschiedlich sind :

Typ 0 : Blockende
Dieser Unterblock besteht nur aus dem Byte 00h. Er steht stets am Ende aller
Unterbloecke und kennzeichnet die Stelle, an der sie Soundausgabe zu beenden
ist.

Typ 1 : Neue Sample Daten
Dieser Unterblock enthaelt die eigentlichen Sampledaten.
Aufbau :

01h | BLKLEN1 | BLKLEN2 | BLKLEN3 | TC | PACK | Sample Data ....

TC = Time Constant : zur Berechnung der Samplerate
  Samplerate = 1000000 DIV (256-TC)
Aus dieser Formel folgt, dass TC deutlich kleiner als 256 sein muss, damit
fuer die Samplerate ein vernuenftiger Wert entsteht (>=44.1 KHz  )

PACK : Packrate = Compression
  00H    = 8 bit   ungepackt
  01h    = 4 bit   gepackt (1:2)
  02h    = 2,6 bit gepackt (1:3)
  03h    = 2 bit   gepackt (1:4)

Dann folgen die eigentlichen Sampledaten.

Typ 2 : Sampledaten
Aufbau :

02h | BLKLEN1 | BLKLEN2 | BLKLEN3 | Sample Data ...

Dient zur Unterteilung von zu grossen Bloecken in kleinere.
( Also wenn ein BLock vom Typ1 / Typ9 zu gross waere )

Typ 3 : Stille

Dieser Block erzeugt eine Pause im VOC - File.
Aufbau:

03h | BLKLEN1 | BLKLEN2 | BLKLEN3 | PERIOD1 | PERIOD2 | TC |

PERIOD : = Laenge der Pause in Sampling-Takten - 1
TC siehe Block 1

Typ 4 : Markierung

04h | BLKLEN1 | BLKLEN2 | BLKLEN3 | Marker1 | Marker2 |

Marker : Werte zwischen 0001h - FFFEh

Typ 5 : ASCII - Text
zum Einbinden von ASCII - Text in VOC - Files

05h | BLKLEN | BLKLEN | BLKLEN | ASCII Data ... | NULL (00h)

Typ 6 : Wiederholung START
Beginn einer Schleife

06h | BLKLEN | BLKLEN | BLKLEN | COUNT | COUNT |

COunt : zwischen 0001h - ffffh = Anzahl der Wiederholungen + 1
  ffffh = unendlich wiederholen.

Typ 7 : Wiedrholung ENDE
Ende der Schleife

07h | BLKLEN | BLKLEN | BLKLEN |

Typ 8 : Sonstige Daten
Relevant ab SB Pro, wird nicht von allen Treibern unterstuetzt !

08h | BLKLEN | BLKLEN | BLKLEN | TC1 | TC2 | PACK | MODE

TC1,TC2 wie Typ1 aber jetzt 16 bit , da Stereo
Samplingrate ( mono   ) = 256000000 DIV (65536-TC)
Samplingrate ( stereo ) = (256000000 DIV (65536-tc)) DIV 2

MODUS : 0h = mono , 01h = stereo

Typ 9 : Neue Sample Daten ( VOC - Format Vers. ab  1.20 )
Relevant fuer SB 16, ersetzt dort Blocktyp 1 bei Samples in CD - Qualitaet.

09h | BLKLEN | BLKLEN | BLKLEN | SR1 | SR2 | PACK | ....
... | BITS | MODE | ......
... |SAMPLE DATA .....

Leider habe ich dazu keine weiteren Informationen finden koennen !


WAV - Dateiformat
( Wesentlich unkomplizierter ! )

HEADER
======

Bytes ( Offset)   Groesse in Bytes Beschreibung
Main Cunk (00h-0Bh)
00h-03h    4      String "RIFF" ( Resource Interchange Format File )
04h-07h    4      Laenge der WAV - Datei
08h-0Bh    4      String "WAVE" (Kennung des WAV - Formats)

Format - Chunk (0Ch-13h
0Ch-0Fh    4      String "fmt"+20h
10h-13h    4      Laengenangaben fuer die Header - Strukturen wave-format und
                  format-specific bestehend aus den Bytefolgen :10h 00h 00h 00h (dez.16)
                  oder :12h 00h 00h 00h (dez.18)

Header - Block : wave format (14h-21h)
14h-15h    2      Art des benutzten Formats , idR 0001h
16h-17h    2      01h = Mono, 02h = Stereo
18h-1Bh    4      Samplingrate ( 11025 Hz, 22050 Hz,44100 Hz )
1Ch-1Fh    4      durchschnitll. Anzahl Bytes / sec.
                  8 - bit Mono  : Samplerate
                  8 - bit stereo: Samplerate x 2
                  16- bit Mono  : Samplerate x 2
                  16- bit Stereo: Samplerate x 4
20h-21h    2      01h = 8-bit Mono
                  02h = 8-bit stereo oder 16-bit Mono
                  04h = 16-bit stereo

Stereo - Header - Block : format - specific (22h-23h)
22h-23h    2      08h = 8 Bit
                  10h = 16Bit

Data Chunk (24h-2Bh)
24h-27h    4      String "data"
27h-2Bh    4      Laenge der Sampledaten


Die Sampledaten folgen hier direkt nach dem Data Chunk.

Hoffe es hilft DIr !

Weitere Infos findest Du in folgenden Buechern :

Das Superbuch Soundblaster , Data Becker Verlag
The Developer Kit for SOund Blaster Series, Creative Labs Inc.
Sowie einigen anderen kleineren Publikationen zu Soundblaster & CO
(Das grosse Soundblaster Buch etc.)
