282 lines
10 KiB
Plaintext
282 lines
10 KiB
Plaintext
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
|
|
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 HI³LOW 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 f�r:
|
|
|
|
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 f�r den Eintrag
|
|
gespeichert bei Effekten sind 2 Daten Byte (Effekt Nr. und Effekt Daten)
|
|
gespeichert.
|
|
|
|
Counter ist ein Z„hler in Ticks bis zum n„chsten Info Byte wenn Counter Bit
|
|
in Info = 0 dann ist f�r den n„chsten 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 k”nnten also maximal 3 Effekte gleichzeitig ausgel”st werden jeder in
|
|
einem anderen Bereich. Maximale Gr”sse 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 ver„ndert.
|
|
Das MSBit wird gel”scht die Noten entsprechen dann den
|
|
Noten 1-108.
|
|
|
|
Der Note Buffer wird als 2 Parameter f�r Note Effekte
|
|
verwendet z.B. f�r Tone Portamentos wo die Effekt Daten
|
|
schon f�r den Steigungsgrad vergeben sind.
|
|
Note Buffer k”nnte man auch dazu verwenden um Noten aus
|
|
zuklammern, also um auszuprobieren wie sich das St�ck
|
|
ohne diese Note anh”rt ;-)
|
|
|
|
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 f�r 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 Bl”cke unterteilt:
|
|
|
|
[DDMF] Format Kennzeichnung. The almighty DELUSION DIGITAL MUSIC FORMAT ;-)
|
|
|
|
[INFO] Info wird nur wenn n”tig gespeichert. Defintion fehlt...
|
|
|
|
[SEQU] Sequencer, solange wie der Block
|
|
|
|
[PATT] Pattern Data, es ist f�r jeden Pattern eine beliebige Track Zahl
|
|
m”glich sonst werden bei 16 Spuren z.b. in einem Pattern nur 4 ben�tzt
|
|
werden zuviel Overhead gespeichert.
|
|
|
|
[SMPI] Info der Samples.
|
|
|
|
[SMPD] Daten der Samples. Sollte nach dem SMPI Block gespeichert sein.
|
|
|
|
[ENDE] Letzter Block im File ;-)
|