DVSM Samples
------------

Jedes DVS Sample beginnt mit folgendem Header:

typedef struct
{
    char magic[6];     
    int headlen;       
    unsigned int freq;          
    char pack;        
    char mode;        
    long blocklen;     
} DVSMHEAD;

Bedeutung der Eintrge:
-----------------------

magic:
	"DVSM\0\0"
headlen:
	Headerlnge, d.h. Abstand der Sounddaten vom Dateibeginn
	Unbedingt auswerten, wegen den Erweiterungsblcken (siehe unten)!!
	Die komplette Headerlnge mu gerade sein!
freq:
	Samplingfrequenz:
			0-7 : Erlaubte CODEC Vorteiler (0: 8kHz ...  7: 49kHz)
			>256: Samplingfrequenz in Hz
pack:
	0: Ungepackt
	2: DVS Packmethode
	4: DVS Voicepackmethode (auf WinRec Pro)
	In Zukunft sind auch andere Werte denkbar! Also nicht nur auf 'pack>0' sondern auf
	'pack==2' oder 'pack==4' abfragen!
mode:
	Bit 0: 8/16 Bit
	Bit 1: Stereo/Mono
blocklen (im Moment nur gltig falls 'pack'==2 oder 'pack'==4):
	Lnge eines gepackten Blocks (= Abstand der Sttzwerte). Bei gepackten Samples
	unbedingt auswerten. Ist kein fester Wert! WinRec schreibt (je nach Buffer)
	verschiedene Blocklngen! Die Blocklnge mu gerade sein!
	
Erweiterungsblcke
------------------

DVS ist ein modulares Format. Nach dem oben beschriebenen Header knnen noch (fast)
beliebig viele Erweiterungsblcke folgen. Die Blcke gehren zum Header, d.h. der
Eintrag 'headlen' umfat auch die Erweiterungen! So knnen (z.B. ltere) Programme
die zustzlichen Informationen berspringen. Der "Minimalheader" ist immer 16 Bytes lang,
nmlich die oben beschriebenen Eintrge.

Ein Block hat folgende Form:

     4 Byte (cookie)   Kennung des Blocks
     2 Byte (len)      Lnge des Blocks
 len-6 Bytes Daten

WinRec versteht ab der Version V1.38 folgende Erweiterungen:

Kennung			Lnge der Daten		Bedeutung
-----------------------------------------------------------------------------------------
'CLCK'			1 Word				0: Interner Takt, 1: Extern CD, 2: Extern DAT

'PEAK'			4 Byte				je ein Word fr linken und rechten Kanal mit dem hchsten
									auftretenden Samplewert
									
'DSPE'			x Bytes				DSP Programm (Soundeffekt !!) im Binary Format

'PARA'			x Bytes				x Parameter fr den Soundeffekt. Darf nicht vor dem 'DSPE'
									Block stehen!

'PACK'			128 bzw. 8 Bytes	Deltapacktabelle fr Distanzwerte. Wird (falls vorhanden)
								    anstelle der Standardtabelle (s.u.) verwendet.
								    
'INFO'			x Bytes				Infotext (z.B. voller Titel)

Weiterhin ist definiert, wird aber (im Moment) noch nicht von WinRec genutzt:

'KARA'			x Bytes				Karaoketext (Beschreibung siehe unten)


Die gesamte Headerlnge kann und darf 65535 Bytes nicht berschreiten. Ein Programm sollte
wenn mglich alle Erweiterungsblcke durchgehen und anhand der Kennung entscheiden, ob
es die Information nutzen kann.

Karaoketextformat
-----------------
	long cookie='KARA'
	int len
	int textlen

danach folgt der Text, der im ASCII Format zeilenweise abgelegt ist. Eine
Textzeile darf nicht lnger als 40 Zeichen sein. Nach dem Text folgt die
Takttabelle. Sie enthlt fr jedes Wort des Textes ein 4-Bytewert der den
zeitlichen Abstand zum vorherigen Wort angibt. Die Angabe erfolgt in der Einheit
1/Samplingfrequenz


Packformat
----------
 (im Moment nur fr 16 Bit Stereo oder Mono Samples!!!!)
 
Ein Block ist wie folgt aufgebaut (Lnge siehe 'blocklen'):

 1. Soundword Links    (16 Bit)
 1. Soundword Rechts   (16 Bit)
 1. Distanzwert Links  (8 Bit)
 1. Distanzwert Rechts (8 Bit)
 				.
 				.
 				.
 n. Distanzwert Links  (8 Bit)
 n. Distanzwert Rechts (8 Bit)


Distanzwerte sind Zeiger auf eine Tabelle mit den 'echten'
16 Bit Distanzwerten. Die Tabelle enthlt Funktionwerte der
Funktion
				   / -1.084618362^-x  fr x<0  (-128 bis -1)
			f(x)= {   0               fr x=0  (0)
				   \  1.084618362^x   fr x>0  (1 bis 127)
				   
Die Tabelle ist (logischerweise) 256 Bytes lang!

Voicepackformat
---------------
 (im Moment nur fr 16 Bit Stereo oder Mono Samples!!!!)
 
Ein Block ist wie folgt aufgebaut (Lnge siehe 'blocklen'):

 1. Soundword Links    (16 Bit)
 1. Soundword Rechts   (16 Bit)
 1. Distanzwert Links  (4 Bit)
 1. Distanzwert Rechts (4 Bit)
 				.
 				.
 				.
 n. Distanzwert Links  (4 Bit)
 n. Distanzwert Rechts (4 Bit)


Distanzwerte sind Zeiger auf eine Tabelle mit den 'echten'
16 Bit Distanzwerten:

-8192,-4096,-2048,-1024,-512,-256,-64,0,64,256,512,1024,2048,4096,8192



Andreas Binner
