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'.