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<53>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<65>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 ;-)
|