-
Notifications
You must be signed in to change notification settings - Fork 50
MIDI
ceski edited this page Feb 7, 2025
·
2 revisions
Woof! provides native MIDI support via WinMM for Windows, ALSA for Linux, and Core MIDI for macOS.
The following native MIDI options are located in woof.cfg. The default values are recommended for most users.
| Name | Default | Min | Max | Description |
|---|---|---|---|---|
| midi_complevel | 1 | 0 | 2 | Compatibility level (0 = Vanilla; 1 = Standard; 2 = Full). "Vanilla" emulates Doom's DMX driver. "Standard" emulates Microsoft GS Wavetable Synth. "Full" sends all MIDI messages. |
| midi_reset_type | 1 | 0 | 3 | Reset type (0 = No SysEx; 1 = GM; 2 = GS; 3 = XG). "No SysEx" is a partial reset for devices that don't support SysEx messages. |
| midi_reset_delay | -1 | -1 | 2000 | Delay after reset (-1 = Auto; 0 = None; 1-2000 = Milliseconds). Hardware devices require time to execute a reset. If the first few notes of a song are cut off, try increasing this value. |
| midi_ctf | 1 | 0 | 1 | Fix invalid instruments by emulating SC-55 capital tone fallback (CTF). This may help with missing notes, pianos sounds, or silence caused by incorrectly written songs. |
| midi_sysex_volume | 0 | 0 | 1 | Use SysEx messages to control volume. Useful for real or emulated hardware MIDI devices when making adjustments to the above options. |
| midi_gain | 0 | -20 | 0 | Gain [dB] adjustment for native MIDI only. Does not affect other music types. |
| Symbol | Meaning |
|---|---|
| ✔️ | Supported |
| Conditionally supported, see notes | |
| ❌ | Not supported |
| Status Byte | MIDI Message | Vanilla | Standard | Full |
|---|---|---|---|---|
| 0x8n | Note Off | ✔️ | ✔️ | ✔️ |
| 0x9n | Note On | ✔️ | ✔️ | ✔️ |
| 0xAn | Polyphonic Key Pressure (Aftertouch) | ❌ | ❌ | ✔️ |
| 0xBn | Control Change (Controller) | ✔️ | ✔️ | ✔️ |
| 0xCn | Program Change | ✔️ | ✔️ | ✔️ |
| 0xDn | Channel Pressure (Channel Aftertouch) | ❌ | ❌ | ✔️ |
| 0xEn | Pitch Bend | ✔️ | ✔️ | ✔️ |
| 0xF0 | SysEx SOX | ❌ | ❌ | ✔️ |
| 0xF7 | SysEx EOX | ❌ | ❌ | ✔️ |
| 0xFF | Meta Message | ✔️ | ✔️ | ✔️ |
| Meta Type | Function | Vanilla | Standard | Full |
|---|---|---|---|---|
| 0x06 | Marker (Final Fantasy: loopStart, loopEnd) | ❌ | ✔️ | ✔️ |
| 0x2F | End of Track | ✔️ | ✔️ | ✔️ |
| 0x51 | Set Tempo | ✔️ | ✔️ | ✔️ |
| RPN MSB | RPN LSB | Function | Vanilla | Standard | Full |
|---|---|---|---|---|---|
| 0x00 | 0x00 | Pitch Bend Sensitivity | ❌ | ✔️ | ✔️ |
| 0x00 | 0x01 | Channel Fine Tuning | ❌ | ✔️ | ✔️ |
| 0x00 | 0x02 | Channel Coarse Tuning | ❌ | ✔️ | ✔️ |
| 0x00 | 0x03 | Tuning Program Select | ❌ | ❌ | ✔️ |
| 0x00 | 0x04 | Tuning Bank Select | ❌ | ❌ | ✔️ |
| 0x00 | 0x05 | Modulation Depth Range | ❌ | ❌ | ✔️ |
| 0x7F | 0x7F | RPN NULL | ❌ | ✔️ | ✔️ |
| CC# | Hex | Function | Vanilla | Standard | Full |
|---|---|---|---|---|---|
| 0 | 0x00 | Bank Select (MSB) | ❌ | ✔️ | ✔️ |
| 1 | 0x01 | Modulation Wheel (MSB) | ✔️ | ✔️ | ✔️ |
| 2 | 0x02 | Breath Controller (MSB) | ❌ | ❌ | ✔️ |
| 4 | 0x04 | Foot Controller (MSB) | ❌ | ❌ | ✔️ |
| 5 | 0x05 | Portamento Time (MSB) | ❌ | ❌ | ✔️ |
| 6 | 0x06 | Data Entry (MSB) | ❌ | ✔️ | ✔️ |
| 7 | 0x07 | Channel Volume (MSB) | ✔️ | ✔️ | ✔️ |
| 8 | 0x08 | Balance (MSB) | ❌ | ❌ | ✔️ |
| 10 | 0x0A | Pan (MSB) | ✔️ | ✔️ | ✔️ |
| 11 | 0x0B | Expression (MSB) | ✔️ | ✔️ | ✔️ |
| 12 | 0x0C | Effect Control 1 (MSB) | ❌ | ❌ | ✔️ |
| 13 | 0x0D | Effect Control 2 (MSB) | ❌ | ❌ | ✔️ |
| 16 | 0x10 | General Purpose Controller 1 (MSB) | ❌ | ❌ | ✔️ |
| 17 | 0x11 | General Purpose Controller 2 (MSB) | ❌ | ❌ | ✔️ |
| 18 | 0x12 | General Purpose Controller 3 (MSB) | ❌ | ❌ | ✔️ |
| 19 | 0x13 | General Purpose Controller 4 (MSB) | ❌ | ❌ | ✔️ |
| 32 | 0x20 | Bank Select (LSB) | ❌ | ✔️ | ✔️ |
| 33 | 0x21 | Modulation Wheel (LSB) | ❌ | ❌ | ✔️ |
| 34 | 0x22 | Breath Controller (LSB) | ❌ | ❌ | ✔️ |
| 36 | 0x24 | Foot Controller (LSB) | ❌ | ❌ | ✔️ |
| 37 | 0x25 | Portamento Time (LSB) | ❌ | ❌ | ✔️ |
| 38 | 0x26 | Data Entry (LSB) | ❌ | ✔️ | ✔️ |
| 39 | 0x27 | Channel Volume (LSB) | ❌ | ❌ | ❌ |
| 40 | 0x28 | Balance (LSB) | ❌ | ❌ | ✔️ |
| 42 | 0x2A | Pan (LSB) | ❌ | ❌ | ✔️ |
| 43 | 0x2B | Expression (LSB) | ❌ | ❌ | ✔️ |
| 44 | 0x2C | Effect Control 1 (LSB) | ❌ | ❌ | ✔️ |
| 45 | 0x2D | Effect Control 2 (LSB) | ❌ | ❌ | ✔️ |
| 48 | 0x30 | General Purpose Controller 1 (LSB) | ❌ | ❌ | ✔️ |
| 49 | 0x31 | General Purpose Controller 2 (LSB) | ❌ | ❌ | ✔️ |
| 50 | 0x32 | General Purpose Controller 3 (LSB) | ❌ | ❌ | ✔️ |
| 51 | 0x33 | General Purpose Controller 4 (LSB) | ❌ | ❌ | ✔️ |
| 64 | 0x40 | Sustain Pedal (Damper, Hold 1) | ✔️ | ✔️ | ✔️ |
| 65 | 0x41 | Portamento On/Off | ❌ | ❌ | ✔️ |
| 66 | 0x42 | Sostenuto | ❌ | ❌ | ✔️ |
| 67 | 0x43 | Soft Pedal | ✔️ | ✔️ | |
| 68 | 0x44 | Legato Footswitch | ❌ | ❌ | ✔️ |
| 69 | 0x45 | Hold 2 | ❌ | ❌ | ✔️ |
| 70 | 0x46 | Sound Controller 1 (Default: Sound Variation) | ❌ | ❌ | ✔️ |
| 71 | 0x47 | Sound Controller 2 (Default: Timbre/Harmonic Quality) | ❌ | ❌ | ✔️ |
| 72 | 0x48 | Sound Controller 3 (Default: Release Time) | ❌ | ❌ | ✔️ |
| 73 | 0x49 | Sound Controller 4 (Default: Attack Time) | ❌ | ❌ | ✔️ |
| 74 | 0x4A | Sound Controller 5 (Default: Brightness) | ❌ | ❌ | ✔️ |
| 75 | 0x4B | Sound Controller 6 (GM2 Default: Decay Time) | ❌ | ❌ | ✔️ |
| 76 | 0x4C | Sound Controller 7 (GM2 Default: Vibrato Rate) | ❌ | ❌ | ✔️ |
| 77 | 0x4D | Sound Controller 8 (GM2 Default: Vibrato Depth) | ❌ | ❌ | ✔️ |
| 78 | 0x4E | Sound Controller 9 (GM2 Default: Vibrato Delay) | ❌ | ❌ | ✔️ |
| 79 | 0x4F | Sound Controller 10 (GM2 Default: Undefined) | ❌ | ❌ | ✔️ |
| 80 | 0x50 | General Purpose Controller 5 | ❌ | ❌ | ✔️ |
| 81 | 0x51 | General Purpose Controller 6 | ❌ | ❌ | ✔️ |
| 82 | 0x52 | General Purpose Controller 7 | ❌ | ❌ | ✔️ |
| 83 | 0x53 | General Purpose Controller 8 | ❌ | ❌ | ✔️ |
| 84 | 0x54 | Portamento Control | ❌ | ❌ | ✔️ |
| 88 | 0x58 | High Resolution Velocity Prefix | ❌ | ❌ | ✔️ |
| 91 | 0x5B | Effects 1 Depth (Default: Reverb Send Level) | ✔️ | ✔️ | |
| 92 | 0x5C | Effects 2 Depth (Default: Tremolo Depth) | ❌ | ❌ | ✔️ |
| 93 | 0x5D | Effects 3 Depth (Default: Chorus Send Level) | ✔️ | ✔️ | |
| 94 | 0x5E | Effects 4 Depth (Default: Celeste [Detune] Depth) | ❌ | ❌ | ✔️ |
| 95 | 0x5F | Effects 5 Depth (Default: Phaser Depth) | ❌ | ❌ | ✔️ |
| 96 | 0x60 | Data Increment | ❌ | ❌ | ✔️ |
| 97 | 0x61 | Data Decrement | ❌ | ❌ | ✔️ |
| 98 | 0x62 | Non-Registered Parameter Number (LSB) | ❌ | ❌ | ✔️ |
| 99 | 0x63 | Non-Registered Parameter Number (MSB) | ❌ | ❌ | ✔️ |
| 100 | 0x64 | Registered Parameter Number (LSB) | ❌ | ✔️ | ✔️ |
| 101 | 0x65 | Registered Parameter Number (MSB) | ❌ | ✔️ | ✔️ |
| 110 | 0x6E | EMIDI: Track Designation | ❌ | ✔️ | ✔️ |
| 111 | 0x6F | EMIDI: Track Exclusion / RPG Maker Loop | ❌ | ||
| 112 | 0x70 | EMIDI: Program Change | ❌ | ✔️ | ✔️ |
| 113 | 0x71 | EMIDI: Channel Volume | ❌ | ✔️ | ✔️ |
| 116 | 0x74 | EMIDI: Loop Begin | ❌ | ✔️ | ✔️ |
| 117 | 0x75 | EMIDI: Loop End | ❌ | ✔️ | ✔️ |
| 118 | 0x76 | EMIDI: Global Loop Begin | ❌ | ✔️ | ✔️ |
| 119 | 0x77 | EMIDI: Global Loop End | ❌ | ✔️ | ✔️ |
| 120 | 0x78 | All Sound Off | ✔️ | ✔️ | ✔️ |
| 121 | 0x79 | Reset All Controllers | ✔️ | ✔️ | ✔️ |
| 122 | 0x7A | Local Control On/Off | ❌ | ❌ | ✔️ |
| 123 | 0x7B | All Notes Off | ✔️ | ✔️ | ✔️ |
| 124 | 0x7C | Omni Mode Off | ❌ | ❌ | ✔️ |
| 125 | 0x7D | Omni Mode On | ❌ | ❌ | ✔️ |
| 126 | 0x7E | Poly Mode Off (Mono Mode On) | ❌ | ✔️ | ✔️ |
| 127 | 0x7F | Poly Mode On (Mono Mode Off) | ❌ | ✔️ | ✔️ |
- "Soft Pedal" (CC#67), "Reverb Send Level" (CC#91), and "Chorus Send Level" (CC#93) are not supported by Microsoft GS Wavetable Synth.
- "RPG Maker Loop" conflicts with "EMIDI: Track Exclusion" (CC#111 for both). An RPG Maker loop point will function only if no EMIDI events are found in the MIDI file.