-
Notifications
You must be signed in to change notification settings - Fork 36
MIDI
ceski edited this page Apr 30, 2024
·
1 revision
Woof! provides native MIDI support via WinMM for Windows, ALSA for Linux, and Core MIDI for macOS.
The following config keys are located in woof.cfg
:
Key | Value | Description |
---|---|---|
midi_complevel |
0 Vanilla1 Standard2 Full |
Compatibility level. "Vanilla" emulates Doom's DMX driver. "Standard" emulates Microsoft GS Wavetable Synth. "Full" sends all MIDI messages. |
midi_reset_type |
0 No SysEx1 General MIDI2 Roland GS3 Yamaha XG |
Reset type. "No SysEx" is a partial reset for devices that don't support the others. |
midi_reset_delay |
-1 Auto0 to 2000 ms |
Delay after reset. 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 |
0 Disable1 Enable
|
Emulate Roland SC-55 capital tone fallback (CTF). Attempts to fix incorrectly written songs that cause missing notes, pianos sounds, or silence. |
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 but are included at Standard compatibility level to match Vanilla and Full.
- 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.