textfiles/music/FORMATS/dmf-form.txt

282 lines
10 KiB
Plaintext
Raw Permalink Normal View History

2021-04-15 13:31:59 -05:00
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DELUSION DIGITAL MUSIC FILEFORMAT V0.16B1 (25/12/93)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ID "INFO" 4 BYTES
INFO_SIZE Jump Bytes to next Block 1 LONGINT
Composer Message [CMSG]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ID "CMSG" 4 BYTES
MSG_SIZE Jump Bytes to next Block 1 LONGINT
Filler 1 BYTE
Message array of char N BYTES
Sequencer [SEQU]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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<48>LOW 1 BYTE
<20> <20>
Ticks per Beat <20><><EFBFBD> <20><><EFBFBD> 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
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
XXXXXXXX = Info Byte
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x not used
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 Effekt VOLUME / 0 not stored
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 Effekt NOTE / 0 not stored
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 Effekt INSTRUMENT / 0 not stored
<EFBFBD><EFBFBD><EFBFBD>1 Volume stored / 0 not stored
<EFBFBD><EFBFBD>1 Note stored / 0 not stored
<EFBFBD>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<65>st werden jeder in
einem anderen Bereich. Maximale Gr<47>sse eines Track Eintrags sind 11 Byte
(Info=0FEh).
Def.: Note
0 = Keine <20>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<65>ndert.
Das MSBit wird gel<65>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<6E>rt ;-)
237-254 = nicht definiert
255 = Note Off
Def.: Volume
0 = keine <20>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:
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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]:
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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"
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
END DDMF
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Das DMF Format ist somit folgende Bl<42>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 ;-)