research by mad::mike, 2008, 2023
Type | Size | Amount | Data |
---|---|---|---|
string | 5 | 1 | "A.H." (zero-terminated) |
short | 2 | 99 | Pattern sequence (from 0 to 98; 99 = end) |
short | 2 | 1 | Number of patterns [P] |
short | 2 | 1 | Speed (3 = 4.5 notes/sec, 2 = 9 n/s, 1 = 18 n/s) |
short | 2 | 1 | Percussion mode: 0x00 = nine voices (9 mel), 0x01 = eleven voices (6 mel, 5 perc) |
short | 2 | 1 | Number of instruments [I] |
Instrument | 69 | [I] | Instrument definitions |
Pattern | varies | [P] | Pattern definitions |
"A.H." are the initials of Arndt Hasch, the author of Macs Opera.
Type | Size | Amount | Data |
---|---|---|---|
(see below) | 56 | 1 | Instrument data |
string | 13 | 1 | Instrument name (padded with '\0's) |
Offset | Size (bytes) | Data | English |
---|---|---|---|
6 | 2 | Anstiegs-Rate Modulator (0..15) | Modulator attack |
32 | 2 | Anstiegs-Rate Träger (0..15) | Carrier attack |
12 | 2 | Abstiegs-Rate Modulator (0..15) | Modulator decay |
38 | 2 | Abstiegs-Rate Träger (0..15) | Carrier decay |
8 | 2 | Halte-Rate Modulator (0..15) | Modulator sustain |
34 | 2 | Halte-Rate Träger (0..15) | Carrier sustain |
14 | 2 | Auskling-Rate Modulator (0..15) | Modulator release |
40 | 2 | Auskling-Rate Träger (0..15) | Carrier release |
10 | 2(?) | Halten Modulator (bool) | Modulator sustaining |
36 | 2(?) | Halten Träger (bool) | Carrier sustaining |
22 | 2(?) | Hüllkurvenskalierung Modulator (bool) | Modulator env scaling (KSR) |
48 | 2(?) | Hüllkurvenskalierung Träger (bool) | Carrier env scaling (KSR) |
2 | 2 | Frequenzmultiplikator Modulator (0..15) | Modulator frequency multiplier |
28 | 2 | Frequenzmultiplikator Träger (0..15) | Carrier frequency multiplier |
4 | 2 | Rückwirkung Modulator (0..7) | (Modulator) feedback |
20 | 2 | Pitchvibrato Modulator (bool) | (Modulator) pitch vibrato |
16 | 2 | Dämpfung Modulator (0..63) | Modulator output level |
42 | 2 | Dämpfung Träger (0..63) | Carrier output level |
0 | 2 | Filter Modulator (0 = Kein, 1 = Hoch, 2 = Tief, 3 = Band) | Modulator key scale level (KSL) |
26 | 2 | Filter Träger (0 = Kein, 1 = Hoch, 2 = Tief, 3 = Band) | Carrier key scale level (KSL) |
18 | 2(?) | Amplitudenvibrato Modulator (bool) | (Modulator) amplitude vibrato |
24 | 2(?) | Frequenzmodulation Modulator (bool) | (Modulator) frequency modulation |
52 | 2 | Wellenform Modulator (0..3) | Modulator wave form |
54 | 2 | Wellenform Träger (0..3) | Carrier waveform |
Currently, see constructor of class CMFSong
for pattern info, and work your way from there. (It's pretty straightforward, though. 😉 A byte of –1 ends the pattern.)
Offset | Size | Data |
---|---|---|
0 | 1 | Time |
1 | 1 | Voice |
2 | 1 | Note |
3 | 1 | Instrument |
4 | 1 | Volume (0..127) |
5 | 1 | Pitch |
CMF Notes are one octave higher than MIDI notes, so CMF note 57 = a' = 440 Hz; CMF note 48 = c'.