-
Notifications
You must be signed in to change notification settings - Fork 42
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.