-
Notifications
You must be signed in to change notification settings - Fork 27
Dn‐FamiTracker module file format specification (.dnm) v4.50
- This text aims to document the binary module file format as of Dn-FamiTracker v0.5.0.1.
- Each section is declared sequentially as it appears in the file.
- Unless specified otherwise, all data is stored in little-endian format.
- Strings are stored in ASCII encoding unless specified otherwise.
Data type |
Unit size (bytes) |
Name |
Typical values |
Description |
Notes |
---|---|---|---|---|---|
char[256] |
Non-padded length of char[] string |
|
|
Identifier string |
In Dn-FT v0.5.0.0, this was changed to |
unsigned int (32 bits) |
4 |
|
0x00000450 |
Module version |
Version number is formatted as BCD (ex. 4.50) |
- Information is based on
DocumentFile.cpp CDocumentFile::BeginDocument()
andFamiTrackerDoc.cpp CFamiTrackerDoc::SaveDocument()
- Modules saved in Dn-FamiTracker v0.5.0.0 and later may save modules with
FILE_HEADER_ID_DN
identifiers, to prevent older FamiTracker versions from reading non-backwards compatible data such asFILE_BLOCK_JSON
andFILE_BLOCK_PARAMS_EMU
.
Each block has a 24-byte header consisting of a block ID, block version, and block size.
Data type |
Unit size (bytes) |
Name |
Typical values |
Description |
Notes |
---|---|---|---|---|---|
char[16] |
16 |
|
|
Identifier string |
Length is zero-padded to 16 bytes |
int (32 bits) |
4 |
|
0x00000006 |
Block version |
Block version number is ANDed with 0xFFFF, but is still written as 32-bit signed integer |
int (32 bits) |
4 |
|
0x1D000000 |
Block size, not counting the block header |
Block ID: PARAMS
Data type |
Unit size (bytes) |
Repeat |
Name |
Typical values |
Description |
Notes |
Present in block version |
---|---|---|---|---|---|---|---|
int (32 bits) |
4 |
|
6 |
Song speed of track 0 |
1 |
||
char |
1 |
|
0x00 |
Expansion audio bitmask |
Same format as expansion audio bitmask found in the NSF format |
2+ |
|
int (32 bits) |
4 |
|
5 |
Number of channels added |
Includes the 5 channels from 2A03. |
1+ |
|
int (32 bits) |
4 |
|
0 |
NTSC or PAL |
1+ |
||
int (32 bits) |
4 |
|
0 |
Playback rate type, 0 = default, 1 = custom, 2 = video |
7+ |
||
int (32 bits) |
4 |
|
16639 |
NSF playback rate, in microseconds |
7+ |
||
int (32 bits) |
4 |
|
60 |
Engine refresh rate, in Hz |
1-6 |
||
int (32 bits) |
4 |
|
1 |
0 = old style, 1 = new style |
3+ |
||
int (32 bits) |
4 |
? |
1 |
Hardware sweep pitch reset |
Not implemented? Vanilla 0.5b stuff. Probably boolean type. |
7+ |
|
int (32 bits) |
4 |
|
4 |
1st row highlight |
3-6 |
||
int (32 bits) |
4 |
|
16 |
2nd row highlight |
3-6 |
||
int (32 bits) |
4 |
|
8 |
Number of N163 channels used |
Only written/read when N163 is enabled. |
5+ |
|
int (32 bits) |
4 |
|
32 |
Fxx speed/tempo split-point |
6+ |
||
char |
1 |
|
0 |
Semitone detuning, range from -12 to 12 |
Moved to Tuning block in FT 050B 2020. Also in Extra Parameters block. |
8 |
|
char |
1 |
|
0 |
Cent detuning, range from -100 to 100 |
Moved to Tuning block in FT 050B 2020. Also in Extra Parameters block. |
8 |
- Information is based on
CFamiTrackerDoc::WriteBlock_Parameters()
Block ID: INFO
Data type |
Unit size (bytes) |
Repeat |
Name |
Typical values |
Description |
Notes |
Present in block version |
---|---|---|---|---|---|---|---|
char[32] |
32 |
|
|
Module name |
Length is zero-padded to 32 bytes |
1+ |
|
char[32] |
32 |
|
|
Module artist |
Length is zero-padded to 32 bytes |
1+ |
|
char[32] |
32 |
|
|
Module copyright |
Length is zero-padded to 32 bytes |
1+ |
- Information is based on
CFamiTrackerDoc::WriteBlock_SongInfo()
Block ID: TUNING
Data type |
Unit size (bytes) |
Repeat |
Name |
Typical values |
Description |
Notes |
Present in block version |
---|---|---|---|---|---|---|---|
char |
1 |
|
0 |
Semitone detuning, range from -12 to 12 |
Also in Extra Parameters block. |
1+ |
|
char |
1 |
|
0 |
Cent detuning, range from -100 to 100 |
Also in Extra Parameters block. |
1+ |
- Information is based on
CFamiTrackerDoc::WriteBlock_Tuning()
- Added in FamiTracker 0.5.0 beta 2020
Block ID: HEADER
Data type |
Unit size (bytes) |
Repeat |
Name |
Typical values |
Description |
Notes |
Present in block version |
---|---|---|---|---|---|---|---|
char |
1 |
|
0x06 |
Number of tracks added. |
Stores track count - 1. (i.e. |
2+ |
|
char[] |
Length of zero-terminated char[] string |
Per number of tracks added ( |
|
|
Names of each track |
Each track name is zero terminated, and therefore delineated by a byte of 0. |
3+ |
char |
1 |
Per number of channels added ( |
|
|
Channel ID ( |
1+ |
|
char[] |
Number of tracks added ( |
|
{0x01, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00} |
Number of additional effect columns on a given channel, per track |
On version 1, this was restricted to the first track. |
1+ |