KMD Format (Fury of the Furries)
Format type | Music |
---|---|
Notation type | Tracked |
Instruments | FM |
Max channel count | 6 + 5 |
Max track count | 1 |
Max pattern count | 128 |
Max order count | 1 |
Tags? | Instrument names |
Games |
This format is used in Fury of the Furries for music. It is a modified version of the MOD music format using FM instruments rather than samples. The instruments are simple described in terms of the register settings for an OPL chip synthesizer on an Adlib or Soundblaster card.
It's name *might* be based on Kalisto MOD Format, but this is speculation.
The file has 6 MOD channels, and a further 5 channels devoted to just percussion, these oddities mean that it is unlikely that there are any MOD file players or tools which can handle this format.
Most MOD players expect PCM samples for the instrument sounds, but the S3M Format used by Scream Tracker 3 has the option to handle this kind of OPL-FM instrument.
2 music files are provided for each stage of the game, The game menu allows you to choose between 'fun' or 'classical' and this determines which of the music files is used for each stage.
Header
Data type | Name | Description |
---|---|---|
UINT8 | Instrument count | Number of instruments in the file. |
UINT8 | Pattern count | Number of patterns in the file. |
UINT8 | End of song | End of song instruction. Usually 127. In PYRAMIDE.KMD it is 120. |
UINT8(128) | Pattern table | Order in which to play the patterns. |
UINT8(7) | Unknown | meaning currently unknown. |
Instrument
The KMD format uses FM instruments, directly specifying register values for a Yamaha OPL-2 compatible synthesizer, such as that found on an Adlib or SoundBlaster. As such, the file contains NO sample data, and where you might expect details of the samples, instead we have these instrument definitions.
Data type | Name | Description |
---|---|---|
CHAR(16) | Instrument name | The name of the instrument, if less than 16 characters it is NULL-terminated |
UINT8 | Op1 Trem/Vib/Sus/KSR/F | Operator 1 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor |
UINT8 | Op2 Trem/Vib/Sus/KSR/F | Operator 2 Tremolo / Vibrato / Sustain / Key Scale Rate / Frequency Multiplication Factor |
UINT8 | Op1 KSL/Level | Operator 1 Key Scale Level / Output Level |
UINT8 | Op2 KSL/Level | Operator 2 Key Scale Level / Output Level |
UINT8 | Op1 A/D | Operator 1 Attack Rate / Decay Rate |
UINT8 | Op2 A/D | Operator 2 Attack Rate / Decay Rate |
UINT8 | Op1 S/R | Operator 1 Sustain Level / Release Rate |
UINT8 | Op2 S/R | Operator 2 Sustain Level / Release Rate |
UINT8 | Op1 Wave | Operator 1 Waveform |
UINT8 | Op2 Wave | Operator 2 Waveform |
UINT8 | FB/Add | Feedback / Additive or FM select |
UINT8 | Percussion | Indicates type of instrument |
Percussion value | Description |
---|---|
0 | This is a melodic instrument and will be played using 2 FM operators |
1 | Bass drum. Will be played using the bass drum channel on the OPL synthesizer |
2 | Snare drum. Will be played using the snare drum channel |
3 | Tom. Will be played using the tom drum channel |
4 | Cymbal. This value is not seen in any files, but is assumed to be the top cymbal according to the synthesizer's feature set |
5 | Hi-hat. Will be played using the hi-hat channel |
FF | Instrument deleted. This instrument is not used in the song |
Pattern
Each pattern consists of 64 steps. Normally the steps are played one after the other until the end of the pattern, and then the next pattern from the Pattern Table is started. The speed of the song dictates how much time elapses between each step being played. Normally trackers run at 50 ticks per second, so a speed of 5 would play 10 steps per second. However, since Fury of the Furries runs at 60fps, it is possible that there are 60 ticks per second in this format.
Each step is 30 bytes long. It contains 6 4-byte values, one for each melodic channel, and a further 6 bytes to control the percussion. A dedicated percussion system is unusual in mod format, and this ties this format quite tightly to the capabilities of the Yamaha OPL2 synthesizer chip. A full pattern will be 64 * 30 = 1920 bytes in length.
Data type | Name | Description |
---|---|---|
UINT8 | Channel 1 Pitch | Note pitch in semitones. |
UINT8 | Channel 1 Instrument | Instrument number (i.e. a value of 2 means the 2nd instrument defined in the file) |
UINT8 | Channel 1 Effect Type | Type of player effect. |
UINT8 | Channel 1 Effect Parameter | Parameter for effect |
UINT8[4] | Channel 2 | Pitch, Instrument, Effect as for Channel 1 |
UINT8[4] | Channel 3 | ... |
UINT8[4] | Channel 4 | ... |
UINT8[4] | Channel 5 | ... |
UINT8[4] | Channel 6 | ... |
UINT8 | Percussion Note On | Bit flags to trigger the 5 percussion instruments High bit -- -- -- BD SN TM CY HH Low bit |
UINT8[5] | Unknown | Probably volume control for each of the 5 percussion instruments. |
Credits
This file format was reverse engineered by carbon14. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)