
DELUSION DIGITAL MUSIC FORMAT  -  rev 0.25 (10/6/94)


Beschreibung des DELUSION DIGITAL MUSIC FORMAT Fileversion 8.
Die Dateikennung ist ".DMF".

Alle frheren DDMF Versionen sind Betaformate und sollten nicht weiter
benutzt werden, Xtracker 1.0 ldt alle Vorgnger Versionen korrekt und
speichert sie als Version 8 ab.


Das DDMF Format ist in folgenden Blcke unterteilt:

[DDMF] Format Kennzeichnung
[INFO] reserviert
[CMSG] Text Mitteilungen
[SEQU] Sequencer, Abspielreihenfolge der Pattern
[PATT] Patterndaten
[INST] reserviert
[SMPI] Defintionen der Samples.
[SMPD] Daten der Samples. Mu hinter dem SMPI Block gespeichert sein.
[ENDE] Endmarkierung des DDMFs


Ŀ
 DDMF Header                                                          
͵
 Fileoffset  Bezeichner                                  Datentyp   
Ĵ
 0h          ID                                          4 Chars    
Ĵ
 Filekennung ist "DDMF"                                               
Ĵ
 4h          FILE VERSION                                1 Byte     
Ĵ
 DDMF Fileversion, diese Beschreibung gilt nur fr Version 8.         
Ĵ
 5h          TRACKER NAME                                8 Chars    
Ĵ
 Name des benutzten Trackers.                                         
Ĵ
 0dh         SONG NAME                                   30 Chars   
Ĵ
 Name des Musikstckes, nicht benutzte Zeichen sollten auf 0 stehen.  
Ĵ
 2bh         COMPOSER NAME                               20 Chars   
Ĵ
 Name des Komponisten, nicht benutzte Zeichen sollten auf 0 stehen.   
Ĵ
 3fh         DATE                                        3 Bytes    
Ĵ
 Erstellungsdatum: je ein Byte Tag, Monat, Jahr+1900                  



Ŀ
 CMSG Block: Mitteilungen                                             
͵
 Blockoffs.  Bezeichner                                  Datentyp   
Ĵ
 0h          BLOCKID                                     1 Dword    
Ĵ
 Blockkennung "CMSG"                                                  
Ĵ
 4h          BLOCKLENGTH                                 1 Dword    
Ĵ
 Lnge in Bytes bis zum nchsten Block.                               
Ĵ
 8h          FILLER                                      1 Byte     
Ĵ
 reserviert                                                           
Ĵ
 9h          MESSAGE                                     Chars      
Ĵ
 ASCII-Text mit einer festen Zeilenlnge von 40 Zeichen.              
 Lnge von MESSAGE = (BLOCKLENGTH - 1) Bytes.                         



Ŀ
 SEQU Block: Sequencer, Abspielreihenfolge der Pattern                
͵
 Blockoffs.  Bezeichner                                  Datentyp   
Ĵ
 0h          BLOCKID                                     1 Dword    
Ĵ
 Blockkennung "SEQU"                                                  
Ĵ
 4h          BLOCKLENGTH                                 1 Dword    
Ĵ
 Lnge in Bytes bis zum nchsten Block.                               
Ĵ
 8h          SEQUENCER LOOP START                        1 Word     
Ĵ
 Sequencer Schleifenanfang                                            
Ĵ
 0ah         SEQUENCER LOOP END                          1 Word     
Ĵ
 Sequencer Schleifenende                                              
Ĵ
 0ch         SEQUENCER                                   Words      
Ĵ
 Liste der Patternnummern die nacheinander abgespielt werden.         
 Lnge von SEQUENCER = (BLOCKLENGTH - 4) Bytes                        



Ŀ
 PATT Block: Patterndaten                                             
͵
 Blockoffs.  Bezeichner                                  Datentyp   
Ĵ
 0h          BLOCKID                                     1 Dword    
Ĵ
 Blockkennung "PATT"                                                  
Ĵ
 4h          BLOCKLENGTH                                 1 Dword    
Ĵ
 Lnge in Bytes bis zum nchsten Block.                               
Ĵ
 8h          PATTERN ENTRIES (1-1024)                    1 Word     
Ĵ
 Anzahl der gespeicherten Pattern.                                    
Ĵ
 0ah         MAX TRACKS (1-32)                           1 Byte     
Ĵ
 Anzahl der der maximal benutzten Tracks.                             
Ĵ
 0bh         PATTERNS                                    Words      
Ĵ
 Folgende Struktur PATTERN ENTRIES mal wiederholt                     
Ĵ
 Patternoff. Bezeichner                                 Datentyp   
Ĵ
 0h          TRACK ENTRIES (1-1024)                     1 Byte     
Ĵ
 Anzahl der gespeicherten Tracks in diesem Pattern.                  
Ĵ
 1h          BEAT                                       1 Byte     
Ĵ
 BEAT = xxxxyyyy                                                     
         reserviert                                         
         Notenzeilen pro Beatschlag                         
Ĵ
 2h          TICK ENTRIES                               1 Word     
Ĵ
 Anzahl der gespeicherten Notenzeilen in diesem Pattern              
Ĵ
 4h          PATTERNLENGTH                              1 Dword    
Ĵ
 Lnge der Patterndata, Bytes bis zum nchsten Pattern.              
Ĵ
 6h          PATTERDATA                                 Bytes      
Ĵ
 Der Patterndatenstrom ist folgendermassen codiert:                  
                                                                     
 Folgende Struktur TICK ENTRIES mal wiederholt                       
Ĵ
 <GLOBAL TRACK> (<TRACK> * TRACK ENTRIES)                           
Ĵ
 GLOBAL TRACK                                                       
                                                                    
  INFO          1 Byte                                              
  (COUNTER)     1 Byte                                              
  (DATA)        1 Byte                                              
                                                                    
  INFO = xxxxxxxx                                                   
                                                            
          Global Track Ereigniss                           
          reserviert                                       
          Pack                                             
                                                                    
  Falls Pack=1 ist das nchst gelesene Byte COUNTER.                
  COUNTER ist ein Zhler der jede Notenzeile herunter gezhlt wird, 
  es sind keine GLOBAL Track Informationen gespeichert bis COUNTER  
  wieder auf 0 steht. COUNTER wird bei einem Patternwechsel auf 0   
  gesetzt. Ist Pack=0 so ist kein COUNTER gespeichert und fr       
  COUNTER gilt der Wert 0, d.h. im nchsten Tick ist wieder ein     
  GLOBAL TRACK gespeichert.                                         
                                                                    
  Falls Global Track Ereigniss > 0 ist folgt ein weiters Byte DATA, 
  das die Effektdaten fr den zugehrige Ereigniss liefert. Ist das 
  Global Track Ereigniss = 0 ist DATA nicht gespeichert.            
                                                                    
  Definition der Global Track Ereignisse siehe DMF_EFF.TXT          
                                                                    
Ĵ
 TRACK                                                              
                                                              
                                                                    
  INFO                 1 Byte                                       
  (COUNTER)            1 Byte                                       
  (INSTRUMENT)         1 Byte                                       
  (NOTE)               1 Byte                                       
  (VOLUME)             1 Byte                                       
  (INSTRUMENT EFFECT)  2 Bytes                                      
  (NOTE EFFECT)        2 Bytes                                      
  (VOLUME EFFECT)      2 Bytes                                      
                                                                    
                                                                    
  INFO                                                              
                                                               
                                                                    
  INFO = xxxxxxxx                                                   
                                                            
         x reserviert                                        
         1=VOLUME EFFECT gespeichert / 0=nicht gespeichert    
         1=NOTE EFFECT gespeichert / 0 ...                     
         1=INSTRUMENT EFFECT gespeichert / 0 ...                
         1=VOLUME gespeichert / 0 ...                            
         1=NOTE gespeichert / 0 ...                               
         1=INSTRUMENT gespeichert / 0 ...                          
         1=COUNTER gespeichert / 0 ...                              
                                                                    
  Folgende Werte sind also nur gespeichert wenn die entsprechenden  
  Bits in INFO gesetzt sind, wenn nicht bedeuted das keine nderung 
  des entsprechenden Parameters.                                    
                                                                    
                                                                    
  COUNTER                                                           
                                                            
                                                                    
  COUNTER ist ein Zhler der jeden Tick herunter gezhlt wird, es   
  sind keine Informationen fr diesen Track gespeichert bis COUNTER 
  wieder auf 0 steht. COUNTER wird bei einem Patternwechsel auf 0   
  gesetzt. Ist COUNTER nicht gespeichert so gilt fr COUNTER der    
  Wert 0, d.h. fr die nchsten Notenzeilen sind wieder Daten fr   
  diesen Track gespeichert.                                         
                                                                    
                                                                    
  INSTRUMENT                                                        
                                                         
                                                                    
  Die Samplenummer des Samples das Angeschlagen wird.               
                                                                    
                                                                    
  NOTE                                                              
                                                               
                                                                    
   0       = Keine nderung                                         
   1-108   = Note in Halbtonschritten,  C0=1 bis H8=108.            
             Dies entspricht einer Midi Note mit 1 addiert.         
   109-128 = Nicht definiert                                        
   129-236 = Die Note wird in den Notenpuffer gespeichert und nicht 
             gespielt, eine spielende Note wird nicht verndert.    
             Das MSBit wird gelscht die Noten entsprechen dann den 
             Noten 1-108.                                           
             Der Notenpuffer wird als 2 Parameter fr Noten-Effekte 
             verwendet z.B. fr Note Portamentos, wo die Effekt-    
             daten schon fr den Steigungsgrad vergeben sind.       
                                                                    
   237-254 = Nicht definiert                                        
   255     = Note Off, setzt die Notenfrequenz auf 0 hz             
                                                                    
                                                                    
  VOLUME                                                            
                                                             
                                                                    
   0     = Nicht definiert                                          
   1-255 = Neue Lautstrke des Tracks, lineare Skalierung           
                                                                    
                                                                    
  INSTRUMENT EFFECT                                                 
                                                  
                                                                    
   1.Byte: Instrument Effekt Nr.                                    
   2.Byte: Instrument Effekt Daten                                  
                                                                    
                                                                    
  NOTE EFFECT                                                       
                                                        
                                                                    
   1.Byte: Noten Effekt Nr.                                         
   2.Byte: Noten Effekt Daten                                       
                                                                    
                                                                    
  VOLUME EFFECT                                                     
                                                      
                                                                    
   1.Byte: Volume Effekt Nr.                                        
   2.Byte: Volume Effekt Daten                                      
                                                                    
                                                                    
  Definition der Volume,Noten,Instrument Effekte in DMF_EFF.TXT     
                                                                    
Ĵ
Ĵ



Ŀ
 SMPI Block: Sample Defintionen                                       
͵
 Blockoffs.  Bezeichner                                  Datentyp   
Ĵ
 0h          BLOCKID                                     1 Dword    
Ĵ
 Blockkennung "SMPI"                                                  
Ĵ
 4h          BLOCKLENGTH                                 1 Dword    
Ĵ
 Lnge in Bytes bis zum nchsten Block.                               
Ĵ
 8h          SAMPLE ENTRIES (1-255)                      1 Word     
Ĵ
  Anzahl der gespeicherten Samples, maximal 255.                      
Ĵ
 6h          SAMPLES                                     Bytes      
Ĵ
 Folgende Struktur SAMPLE ENTRIES mal wiederholt                      
Ĵ
 Sampleoff.  Bezeichner                                 Datentyp   
Ĵ
 0h          Y = NAME LENGTH (0-30)                     1 Byte     
Ĵ
 Lnge des Samplenamens, die Lnge des ist auf maximal 30 Zeichen    
 beschrnkt.                                                         
Ĵ
 1h          SAMPLE NAME                                X Chars    
Ĵ
 Name des Samples in ASCII Zeichen. Lnge des Namens ist NAME LENGTH 
 Zeichen.                                                            
Ĵ
 Y + 1h      SAMPLE LENGTH                              1 Dword    
Ĵ
 Lnge des Samples in Bytes.                                         
Ĵ
 Y + 5h      SAMPLE LOOP START                          1 Dword    
Ĵ
 Sample Schleifen Start Position.                                    
Ĵ
 Y + 9h      SAMPLE LOOP END                            1 Dword    
Ĵ
 Sample Schleifen End Position.                                      
Ĵ
 Y + 0dh     C3 FREQUENCY                               1 Word     
Ĵ
 Frequenz, in Hz, mit der das Sample bei der Note C-3 gespielt wird. 
 Das Sample kann dadurch beliebig gestimmt werden. Gltiger Bereich  
 fr C3 FREQUENCY ist 1000-45000 Hz.                                 
Ĵ
 Y + 0fh     VOLUME                                     1 Byte     
Ĵ
 Samplelautstrke.                                                   
                                                                     
 VOLUME = 0 kein Auswirkung                                          
          1-255 Lautstrke, linearer Skalierung                      
Ĵ
 Y + 10h     TYPE                                       1 Byte     
Ĵ
                                                                     
 TYPE = xxxxxxx0   = kein Schleife                                   
        xxxxxxx1   = Sample wird mit einer Schleife gespielt, das    
                     Sample spielt vom Start bis SAMPLE LOOP END und 
                     wiederholt danach den Bereich von SAMPLE LOOP   
                     START bis SAMPLE LOOP END.                      
        xxxxxx0x   = 8BIT Sample                                     
        xxxxxx1x   = 16BIT Sample                                    
        xxxxXXxx   = Kompremierungsverfahren                         
        xxxx00xx   = Unkompremiert vorzeichenbehaftet                
        xxxx01xx   = Kompremierungs Typ0                             
        xxxx10xx   = (Kompremierungs Typ1)                           
        xxxx11xx   = (Kompremierungs Typ2)                           
        xXXXxxxx   = nicht Definiert                                 
        0xxxxxxx   = --> Die Sampledaten sind im SMPD Block des DMFs 
                     gespeichert.                                    
        1xxxxxxx   = --> Die Sampledaten sind in einer Biblothek     
                     gespeichert.                                    
                                                                     
Ĵ
 Y + 11h     LIBRARY NAME                               8 Byte     
Ĵ
 Biblotheks Kennzeichnung unter der das Sample zu finden ist.        
Ĵ
 Y + 19h     FILLER                                     1 Word     
Ĵ
 reserviert                                                          
Ĵ
 Y + 1bh     ID CRC32                                   1 DWord    
Ĵ
 Prfsumme der Sampledaten.                                          
Ĵ



Ŀ
 SMPD Block: Sample Daten                                             
͵
 Blockoffs.  Bezeichner                                  Datentyp   
Ĵ
 0h          BLOCKID                                     1 Dword    
Ĵ
 Blockkennung "SMPD"                                                  
Ĵ
 4h          BLOCKLENGTH                                 1 Dword    
Ĵ
 Lnge in Bytes bis zum nchsten Block.                               
Ĵ
 8h          SAMPLE DATA                                 Bytes      
Ĵ
 Folgende Struktur SAMPLE ENTRIES (SMPI) wiederholt                   
Ĵ
 Sampleoff.  Bezeichner                                 Datentyp   
Ĵ
 0h          SAMPLE DATA LENGTH                         1 Dword    
Ĵ
 Lnge des Sampledatenstroms. Bei kompremierten Samples die Lnge    
 des Samplepackstroms. Bei einem Sample das in einer Biblothek       
 gespeichert ist steht SAMPLE DATA LENGTH auf 0.                     
Ĵ
 4h          SAMPLE DATA STREAM                         X Bytes    
Ĵ
 Sampledatenstrom.                                                   
Ĵ



Ŀ
 ENDE Block: End-Markierung des DDMFs                                 
͵
 Blockoffs.  Bezeichner                                  Datentyp   
Ĵ
 0h          "ENDE"                                      1 Dword    




D-LUSION DIGITAL MUSIC FORMAT  Sample Pack Type 1  - rev. 0.26 (6/9/94)


Sample Pack Typ 1, 8 Bit Samples "Delta Huffman" loseless:

Die Absolutewerte der nderungsrate der Samplewerte wird nach dem Huffman-
verfahren gepacked.

Der Packdatenstrom des Samples begint mit dem Huffman Baum:

[7 Bit Knotenwert  1 Bit Linker Ast  1 Bit Rechter Ast ] [ . ....] [..

Ist das Flag fr den "Linker Ast" bzw. "Rechter Ast" gesetzt hngt ein Linker
bzw. Rechter Unterast am Knoten. Keine Unterste => Knoten ist ein Blatt.
Die linken ste am Baum werden immer zu erst aufgebauet. Wenn ein Blatt
erreicht ist, am nchst hheren Knoten den rechten Ast aufbauen und dann
wieder die linken ste, bis ein Blatt erreicht usw.

Sobald der Baum "voll" ist, man ist wieder an der Wurzel angekommen, folgen
die Deltawerte des Samples:

[ 1 Bit Vorzeichen  X Bits Huffmancode ] [ . ....] [...

Die signed 8 Bit Sampledaten erhlt man nach folgendem Algo:

signed char value;
signed char delta;
signed char sample_data[sample_length];
char sign;

value = 0;
position = 0;

while (position < sample_length) {

  sign = (Vorzeichen Bit);

  Huffmancode auswerten bis zum erreichen des Blattes.
   (Bit == 0 im Baum links abbiegen, Bit == 1 im Baum rechts abbiegen)

  delta = (Wert des Blattes im Huffmanbaum);
  if (sign == 1) delta = delta ^ 0xff;   /* if signed -> 1's complement */

  value = value + delta;
  sample_data[position] = value;
  position++;
}


[D-Lusion], Code-X



DELUSiON DIGITAL MUSIC EFFECTS V0.50 (6/6/94)



DATA = unsigned Byte Wert (0 - 255)
SIGNED = signed Byte Wert (-128 - 127)
HILOW = Hi und Low Nibble des Bytes (0 - 15)


GLOBAL TRACK EFFEKTE


Nr.   Name

0   Keine Daten


1   Set Tick Frame Speed   DATA

  Setzt die Abspielgeschwindigkeit in 1/4 hz Schritten.
  [DATA] = 1/4 Notenzeilen pro Sekunde, 255 = 64 Notenzeilen pro Sekunde


2   Set BPM Speed          DATA

  Setzt die BPM Geschwindigkeit auf [DATA]. BPM Speed ist abhngig
  vom den momentan gesetzten Ticks per Beat, die in jedem Pattern
  gespeichert sind.
  Bei einem Patternwechsel wird die BPM Speed neu berechnet. BPM Speed
  wird intern in Tickspeed umgerechnet. Bei einem Beatwechsel auf 0
  wird in den Tickspeed Modus geschaltet, und die zuletzt gesetzte
  Geschwindigkeit beibehalten.

  Tick Speed = (BPM Speed/60 * Ticks per Beat) * 4


3   Set Beat               HILOW           Pattern Header

  [HI DATA] = Ticks per Beat
  [LOW DATA] = reserviert

  berschreibt die Ticks per Beat des aktuellen Pattern.
  Jedes Pattern hat im Header einen default Beat gespeichert, dieser Effekt
  verndert den Beat nur im aktuellen Pattern.
  Im BPM Speed Modus wird die Geschwindikeit an den neuen Beat angepasst.
  Bei Beat=0 wird in den Tick Speed Modus geschaltet.


4   Tick Delay             HILOW

  [HI DATA] = Anzahl der Ticks die gewartet werden, bis die nchste Noten-
              zeile geladen wird.
  [LOW DATA] = 1/16 Ticks die gewartet werden, bis die nchste Notenzeile
               geladen wird.


5   Set External Flag      DATA

  [DATA] kann zu Synchronisation verwendet werden.


6   Slide Speed Up         DATA

  Slidet die aktuelle Tick/BPM Geschwindigkeit um [DATA] Einheiten,
  bis zur nchsten Notenzeile hoch.


7   Slide Speed Down        DATA

  Slidet die aktuelle Tick/BPM Geschwindigkeit um [DATA] Einheiten
  bis zur nchsten Notenzeile herunter.




INSTRUMENT EFFEKTE


0   Kein Effekt


1   Stop Sample              ---

  Stoppt das Sample. Der Unterschied zu "Note Off" ist, da
  nachfolgende Notennderungen nicht mehr gespielt werden.
  "Note Off" dagegen hlt das Sample an aktueller Position.


2   Stop Sample Loop         ---

  Schaltet die Schleife des aktuell spielenden Samples aus.
  Das Sample klingt aus.


3   Instrument Volume Override/  ---
    Restart Sample

  Spielt das Sample von vorne, unterschied zu einem normalen Sample Trigger
  ist, da das Instrument Volume nicht bernommen wird.


4   Sample Delay/            DATA
    Trigger Sample

  [DATA] = 1/256 Ticks

  Sample Delay, Verzgert das Abspielen des Samples, der Notenanschlag
  wird dadurch verzgert.


5   Tremolo Retrig Sample    DATA

  Das Sample wird repetierend angeschlagen.
  [DATA] in 1/256 Ticks, die das Sample bis zum nchsten Anschlag
  spielt.


6   Set Sample Offset        DATA

  [DATA] = Sample Offset in 256 Byte Blcke

  Setzt das Sample Offset eines spielenden Samples auf die Position
  [DATA]*256. Falls der Wert grsser ist als die Samplelnge, wird der
  Effekt ignoriert.


7   Set Sample Offset +64k   DATA

  [DATA] = Sample Offset in 256 Byte Blcke + 64k


8   Set Sample Offset +128k  DATA

  [DATA] = Sample Offset in 256 Byte Blcke +128k


9   Set Sample Offset +192k  DATA

  [DATA] = Sample Offset in 256 Byte Blcke +192k


10  Invert Sample play direction  ---

  Invertiert die Abspielrichtung des Samples, von aktueller Sample-
  position an.




NOTEN EFFEKTE


0   Keine Effekt


1   Note Finetune            SIGNED

  Feineinstellung der Notenfrequenz.
  [SIGNED] = Note um +/- 1/127 Halbtonschritte verstimmen.


2   Note Delay               DATA

  Der Notewert wird nach [DATA]/256 Ticks gesetzt. Die Notenderung wird
  damit verzgert. Eine Verzgerung des Notenanschlags bewirkt "Sample
  Delay".


3   Arpeggio                 HILOW

  [HI DATA] = Halbtonschritte, ber Grundnote
  [LOW DATA] = Halbtonschritte, ber Grundnote

  Die Note wird zwischen Note, Note+[HI DATA] und Note+[LOW DATA] alterniert.


4   Portamento Up            DATA

  Frequenz nach oben portamentieren. [DATA] = 1/16 Halbtonschritte die
  bis zur nchsten Notenzeile nach oben geslidet werden.
  Die Portamento Up Grenze liegt bei C-9.


5   Portamento Down          DATA

  Frequenz nach unten portamentieren. [DATA] = 1/16 Halbtonschritte die
  bis zum nchsten Notenzeilenach unten geslidet werden.
  Die Portamento Down Grenze liegt bei C-0.


6   Portamen to Note         DATA

  Frequenz in Richtung der letzt gesetzten "Buffer Note" sliden.
  [DATA] = 1/16 Halbtonschritte die bis zur nchsten Notenzeile geslidet
  werden.


7   Scratch to Note          DATA

  Portiert Die Note bis zur nchsten Notenzeile zur Note in [DATA]. Die
  Auflsung des Portamentos sind Halbtonschritte.
  [DATA] Note in Halbtonschritte (0=C-0 - 107=H-8)';


8   Vibrato Sin              HILOW

  Note wird mit einem Sinussignal moduliert.

  [HI DATA] = Vibrato Periodenlnge in Notenzeilen
  [LOW DATA] = Vibrato Amplitude in 1/8 Halbtonschritte


9   Vibrato /\/\             HILOW

  Note wird mit einem Dreieck Signal moduliert.

  [HI DATA] = Vibrato Periodenlnge in Notenzeilen
  [LOW DATA] = Vibrato Amplitude in 1/8 Halbtonschritte


10  Vibrato Sqaure           HILOW

  Note wird mit einem Rechteck Signal moduliert.

  [HI DATA] = Vibrato Periodenlnge in Notenzeilen
  [LOW DATA] = Vibrato Amplitude in 1/8 Halbtonschritte


11  Note Tremolo             HILOW

  Note Tremolo, alterniert zwischen aktueller Note und Note Off.
  [HI DATA] = Periodenlnge aktuelle Note (Bereich 0-15, 15 = 1/2 Notenzeile)
  [LOW DATA] = Periodenlnge Note Off (Bereich 0-15, 15 = 1/2 Notenzeile)


12  Note Cut                 DATA

  Schaltet die Note mit einer Verzgerung ab.
  [DATA] = 1/255 Notenzeilen (Bereich 0-255, 255 = 1 Notenzeile)




VOLUME EFFEKTE


0   Keine Effekt


1   Volume Slide Up          DATA

  Regelt die Lautstrke um [DATA] Einheiten, bis zur nchsten Notenzeile,
  hoch.


2   Volume Slide Down        DATA

  Regelt die Lautstrke um [DATA] Einheiten, bis zur nchsten Notenzeile,
  herunter.


3   Volume Tremolo           HILOW

  Alterniert die Lautstrke zwischen an/aus.
  [HI DATA] = Periodenlnge an (15 = 1/2 Notenzeile)
  [LOW DATA] = Periodenlngem aus (15 = 1/2 Notenzeile)


4   Volume Vibrato Sin       HILOW

  Moduliert die Lautstrke mit einer Sinuswelle

  [HI DATA] = Vibrato Periodenlnge in Notenzeilen
  [LOW DATA] = Modulationstiefe (15 = gesamter Volumebereich)


5   Volume Vibrato /\/\      HILOW

  Moduliert die Lautstrke mit einer Dreieckswelle.

  [HI DATA] = Vibrato Periodenlnge in Notenzeilen
  [LOW DATA] = Modulationstiefe (15 = gesamter Volumebereich)


6   Volume Vibrato Sqaure    DATA

  Moduliert die Lautstrke mit einer Rechteckswelle.

  [HI DATA] = Vibrato Periodenlnge in Notenzeilen
  [LOW DATA] = Modulationstiefe (15 = gesamter Volumebereich)


7   Set Balance              DATA

  Setzt die Balanceposition des Tracks.
  [DATA] =  0 = Links -- 128 = Mitte -- 255 = Rechts


8   Slide Balance Left       DATA

  Schiebt die Balance des Tracks, bis zur nchsten Notenzeile, um [DATA]
  Einheiten nach links.


9   Slide Balance Right      DATA

  Schiebt die Balance des Tracks, bis zur nchsten Notenzeile, um [DATA]
  Einheiten nach rechts.


10  Balance Vibrato Left/Right  HILOW

  Moduliert die Balance mit einer Sinuswelle.
  [HI DATA] = Periodenlnge der Schwingung in Notenzeilen
  [LOW DATA] = Balancetiefe (15 = max. Balanceamplitude)





DELUSION DIGITAL MUSIC FILEFORMAT  V0.16B1 (25/12/93)


Sorry dudes, some stuff is still in German, but who carez ;-)
Will be converted to English soon.... Ask us for probz


EXTENSION IS  ".DMF"

Header [DDMF]:

             ID                   "DDMF"                   4   BYTES
             VERSION              current is 04            1   BYTE
             TRACKER NAME         ex. "XTRACKER" ;-)       8   BYTES
             SONG NAME            ex. "my first DMF"       30  BYTES
             COMPOSER NAME        ex. "COSMIC"             20  BYTES
             DATE                 ex. "27 12 93"           3   BYTES
                                  Day,Month,Year


InfoHeader [INFO]:

             ID                   "INFO"                   4   BYTES
             INFO_SIZE            Jump Bytes to next Block 1   LONGINT


Composer Message [CMSG]:

             ID                   "CMSG"                    4  BYTES
             MSG_SIZE             Jump Bytes to next Block  1  LONGINT
             Filler                                         1  BYTE
             Message              array of char             N  BYTES


Sequencer [SEQU]:

             ID                   "SEQU"
             SEQU_SIZE            Jump Bytes to next Block 1   LONGINT
             SEQU LOOP START                               1   WORD
             SEQU LOOP END                                 1   WORD
             SEQUENCER            (SEQU_SIZE/2 WORDS)-1 !!!


Pattern [PATT]:


             ID                   "PATT"                   4   BYTES
             PATT_SIZE            Jump Bytes to next Block 1   LONGINT
             MAX PATTERN          1-1024                   1   WORD
             MAX TRACKS           Tracks required to play  1   BYTE
                                  this piece of Music =<16

For 1 to MAX PATTERN:

               TRACK ENTRYS         Tracks (max.32)          1   BYTE
               BEAT                 HILOW                   1   BYTE
                                       
                    Ticks per Beat    Beats per Measure

               MAX TICK             Ticks the Pattern is     1   WORD
                                    long. (max. 512)
               JMP_SIZE             Bytes to Jump to next    1   LONGINT
                                    Pattern


Track Datastream: <Global Track> ((<Info byte> <X Data bytes>) * MAX Tracks)
                  <Global Track> ((<Info byte> <X Data bytes>) * MAX Tracks)
                      ...

GLOBAL TRACK


                EFFECT               the global effect        1   BYTE
                DATA                 the data for gl. eff.    1   BYTE
                                     only stored if EFFECT>0

 Getrennte allgemeine Spur fr:

  Speed, Delays, Beat/Tick Change, Flags, General Volume


INFO BYTE


XXXXXXXX  = Info Byte

x not used
1 Effekt VOLUME / 0 not stored
1 Effekt NOTE / 0 not stored
1 Effekt INSTRUMENT / 0 not stored
1 Volume stored / 0 not stored
1 Note stored / 0 not stored
1 Instrument stored / 0 not stored
1 Counter to next Info Byte / 0 not stored, next Info Byte in 1 Tick

Wenn ein Bit im Info gesetzt ist ein Daten Byte fr den Eintrag
gespeichert bei Effekten sind 2 Daten Byte (Effekt Nr. und Effekt Daten)
gespeichert.

Counter ist ein Zhler in Ticks bis zum nchsten Info Byte wenn Counter Bit
in Info = 0 dann ist fr den nchsten Tick wieder ein Info Byte
vorhanden.

Effekt Gruppen:

INSTRUMENT: Jump Position, Loop Controll, Reverse, Scratch, Filter

NOTE: Portamento, Tremolo, Vibrato, Arpeggio

VOLUME: Set, Slide, Tremolo, Vibrato, Arpeggio, Stereo

Es knnten also maximal 3 Effekte gleichzeitig ausgelst werden jeder in
einem anderen Bereich. Maximale Grsse eines Track Eintrags sind 11 Byte
(Info=0FEh).


Def.: Note

       0       = Keine nderung
       1-108   = Note in Halbtonschritten,  C0=1 bis H8=108
                 Dies entspricht einer Midi Note mit 1 addiert
       109-128 = nicht defined
       129-236 = Set Note Buffer
                 Die Note wird in den Note Buffer gespeichert und nicht
                 gespielt, eine spielende Note wird dabei nicht verndert.
                 Das MSBit wird gelscht die Noten entsprechen dann den
                 Noten 1-108.

                 Der Note Buffer wird als 2 Parameter fr Note Effekte
                 verwendet z.B. fr Tone Portamentos wo die Effekt Daten
                 schon fr den Steigungsgrad vergeben sind.
                 Note Buffer knnte man auch dazu verwenden um Noten aus
                 zuklammern, also um auszuprobieren wie sich das Stck
                 ohne diese Note anhrt ;-)

       237-254 = nicht definiert
       255     = Note Off

Def.: Volume

       0 = keine nderung
       1 - 255 = Volume (255=Max Volume, linear Scale)

  For 1 to MAX TICKS:

    Global Effect Nr.                1 BYTE
    (Effect Data)                    1  "


    For 1 to MAX TRACKS

      PatternEntry:
      
      Info Byte                      1 BYTE
      (Counter Byte)                 1  "
      (Instrument Byte)              1  "
      (Note Byte)                    1  "
      (Volume Byte)                  1  "
      (INSTRUMENT Effekt Word)       2  "
      (NOTE Effekt Word)             2  "
      (VOLUME Effekt Word)           2  "

    END MAX TRACKS
  END MAX TICKS
END MAX PATTERN


Instrument [INST]:


Ist dieser Block nicht vorhanden zeigen die Instrument Nr. im Pattern
direkt auf die Samples im [SMPI] Block.

             ID                   "INST"                   4   BYTES
             INSTR_SIZE            Jump Bytes to next Block 1   LONGINT
             MAX INSTR             max. 255                 1   BYTE

             NAME                 the Instrumentname       30  BYTES

             INSTR TYPE                                     1  BYTE
                   xxxxxxXX   = Instrument Type
                   xxxxxx00   = Sample aus [SMPI] Block
                   xxxxxx01   = Midi Device, Midi Keyboard
                   xxxxxx10   = FM Instrument ;-)))))))
                   xxxxxx11   = Not Defined
                   xxxxxXxx   = 1 = valid Attack Envelop, 0 = not valid
                   xxxxXxxx   = 1 = Sustain ON, 1 = Sustain OFF
                   XXXXxxxx   = not used

             RANGE ENTRYS         Anzahl der Range Definition Entrys
                                                            1  BYTE
For 1 to RANGE ENTRYS
             RANGE DEFINITION
             SMPI NR              Nr. des Samples im [SMPI] Block
                                  das fr diesen Bereich gespielt
                                  wird                      1  BYTE
             RANGE_Length         Halbtonschritte der dieser Eintrag
                                  gilt                      1  BYTE
END RANGE DEFINTION

             ENVELOP              6 Point Envelop noch nicht geanu
                                  definiert ;-)



SampleInfo [SMPI]:

             ID                   "SMPI"                   4   BYTES
             SMPI_SIZE            Jump Bytes to next Block 1   LONGINT
             MAX SAMPLES          max. 250                 1   BYTE

For 1 to MAX SAMPLES:

             NAME_LENGTH          length of NameBlock      1   BYTE
             NAME                 the samplename           NAME_LENGTH BYTES
             LENGTH               length of Sample         1   LONGINT
             LOOP_START           start of the loop        1   LONGINT
             LOOP_END             end of the loop          1   LONGINT
             FREQUENCY            frequency for C-3        1   WORD
             VOLUME               Instrument Volume        1   BYTE
                                  0 = don't change current Volume
                                  1 - 255 = Volume (255=Max Volume, linear Scale)
             TYPE                 sample type              1   BYTE
                              xxxxxxx0   = not looped
                              xxxxxxx1   = looped
                              xxxxxx0x   = 8BIT
                              xxxxxx1x   = 16BIT    (not yet supported)
                              xxxxXXxx   = Packe Type
                              xxxx00xx   = Unpacked signed
                              xxxx01xx   = Pack Type 0
                              xxxx10xx   = Pack Type 1
                              xxxx11xx   = Pack Type 2
                              xXXXxxxx   = not defined.
                              0xxxxxxx   = --> stored in dmf
                              1xxxxxxx   = --> stored in bib.

             FILLER               not defined ;-)         1   WORD
                                  should be zero

             CRC32_ID             checksum do identify    1   DWORD
                                  equal Samples in bib.

END MAX SAMPLES


SampleData [SAMPD]:

             ID                   "SMPD"                   4   BYTES
             SMPD_SIZE            Jump Bytes to next Block 1   LONGINT

             SAMPLELENTGH         Jump Bytes to next Entry 1   LONGINT
             SAMPLE DATA          Data of Sample         SAMPLELENGTH Bytes

Stream:    <DataLength> <Sample Data> <DataLength> <Sample Data>


[Ende]:      ID                   "ENDE"


END DDMF



Das DMF Format ist somit folgende Blcke unterteilt:

[DDMF] Format Kennzeichnung. The almighty DELUSION DIGITAL MUSIC FORMAT ;-)

[INFO] Info wird nur wenn ntig gespeichert. Defintion fehlt...

[SEQU] Sequencer, solange wie der Block

[PATT] Pattern Data, es ist fr jeden Pattern eine beliebige Track Zahl
       mglich sonst werden bei 16 Spuren z.b. in einem Pattern nur 4 bentzt
       werden zuviel Overhead gespeichert.

[SMPI] Info der Samples.

[SMPD] Daten der Samples. Sollte nach dem SMPI Block gespeichert sein.

[ENDE] Letzter Block im File ;-)

