home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 September
/
Chip_2000-09_cd1.bin
/
sharewar
/
Slunec
/
app
/
16
/
MOD.SWG
/
0004_DMF.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1996-09-04
|
9KB
|
184 lines
--------M-DMF-------------------------------
The Digital Music Files are high quality MOD style files with up to 32
channels/1024 beats per track. The X-Tracker by the demo group D-Lusion
produces this format. In general, the format is well organised due to
the ID/Blocklength structure wich makes downward compatibility to older
version files easy, but the Version 4 (current version) of the file
format, produced by X-Tracker 0.30ß still requires some manual scanning
for the next ID which I regard as not so nice. Version 5 of the format
has the [SEQU] block length fixed, but the [SMPD] block has the length
0.
The file consists of several blocks, each with a 4 char (dwordint) ID tag
and a length of the record data. The main file header looks as follows :
OFFSET Count TYPE Description
0000h 4 char ID='DDMF'
0004h 1 byte Version id.
4 -> XTracker 0.30ß
0005h 8 char Tracker name, e.g. 'XTRACKER', 'HACKTRAK' :-)
000Dh 30 char Song name (ASCIIZ?)
002Bh 20 char Name of composer (ASCIIZ?)
0049h 1 byte Day of creation
004Ah 1 byte Month of creation
004Bh 1 byte Year of creation
The other headers have the standard skip record format, in this section
named DMFblock. The offsets start _after_ this header record :
OFFSET Count TYPE Description
0000h 4 char Record tag (see below)
0004h 1 dword Size of data bedwording to this tag
DMFblock [INFO]
Contains some message in ASCII. Length of the message is the size of
the record.
DMFblock [CMSG]
Contains the message the composer wants to bring to us. After the ID
record, another fill byte preceeds the real message !
OFFSET Count TYPE Description
0000h 1 byte Junk byte
0001h ? char Composer message
DMFblock [SEQU]
Contains the information necessary for sequencing the different tracks.
OFFSET Count TYPE Description
0000h 1 word Song loop start
0002h 1 word Song loop end
0004h ? word Sequencer data
DMFblock [PATT]
This block contains the information about the different patterns and
tracks.
0000h 1 word Maximum pattern (=Songlength)
="MPT"
0004h 1 byte Number of channels of this song (<= 16)
0005h "MPT" rec Pattern data.
1 byte Track entries. (<=32)
="TET"
How many tracks this pattern has.
XTracker allows a different number of
tracks for each pattern.
1 byte Beat information
High nibble : Ticks per beat
Low nibble : Beats per measure
1 word Maximum number of ticks (<=512)
1 dword Number of bytes to skip for the
next pattern information.
? rec Track data stream
1 byte Global track effect
1 byte Global track data (only if global
effect >0 !!!)
"TET" rec
1 byte Information byte, bitmapped
For each bit set in the info byte, one
or two data byte(s) follow. This info byte
must not always be there, see below. For
effects, 2 bytes follow.
0 - reserved
1 - Volume effect
2 - Note effect
3 - Instrument effect
4 - Volume set
5 - Note set
6 - Instrument set
7 - Counter to next information byte.
Not set means, that next info byte
follows in 1 tick, unit is in
ticks.
The maximum number of effects is 3 at a time,
the maxximum size of a track information is
11 bytes (with info=0FEh).
? rec Effect bytes
1 byte Effect number
1 byte Effect data
? byte Set data
** Here follows the pattern data, but it's too late today **
DMFblock [INST]
This block contains the information about the instrument data. If this
block does not exists, then the instrument numbers in the patterns point
directly to the samples in the [SMPI] block.
OFFSET Count TYPE Description
0000h 1 byte Number of instruments
0001h ? rec Instrument information block
30 char The name of the instrument
1 byte Instrument type, bitmapped
0 - Instrument type
1 - Instrument type
00 - Sample in [SMPI] block
01 - MIDI device
10 - FM instrument
11 - reserved
2 - valid attack envelope
3 - sustain on
4 - reserved
5 - reserved
6 - reserved
7 - reserved
1 byte Range entries
="REN"
Like the GF1 patterns, an instrument can
consist of several samples.
"REN" rec Range definition
1 byte Sample to be played in this range
1 byte Length of this range in half tone steps up
6 byte Not yet defined 6-point envelope
DMFblock [SMPI]
This block contains the information about the samples stored in the file.
OFFSET Count TYPE Description
0000h 1 byte Number of samples (<= 250)
="NUM"
"NUM" rec Sample record
1 byte Length of sample name
? char Name of the sample
1 dword Length of sample in bytes
1 dword Start of sample loop
1 dword End of sample loop
1 word Frequency used for C-3
1 byte Volume for sample
0 - Don't change current volume
otherwise volume (linear scale)
1 byte Sample type, bitmapped
0 - not looped/looped
1 - 8/16-bit sample
(16-bit not supported with X-Tracker v0.30)
2,3 - Pack type :
00 - unpacked, signed sample
01 - pack type 0
10 - pack type 1
11 - pack type 2
4-6 - reserved, set to zero
7 - Sample stored in dmf/bib
1 word reserved, set to zero
1 dword crc32 of sample to identify samples
in BIB.
DMFblock [SMPD]
This block contains the sample data (raw or packed, see [SMPI] block) in
the following format : <SampleLength> <SampleData> <SampleLength>
<SampleData> etc.
OFFSET Count TYPE Description
0000h 1 dword Length of the following sample
? byte Sample data (might be packed)
DMFBlock [ENDE]
This block serves as a end of file marker and can be used for
validation. Note that the four ID characters are _not_ followed by a
length dword ! Each DMF file simply ends with the four characters
'ENDE'.
EXTENSION:DMF
OCCURENCES:PC
PROGRAMS:X-TRACKER,PLAY_DMF
SEE ALSO:
VALIDATION: