diff options
author | 3araht <[email protected]> | 2024-01-09 20:05:30 +0900 |
---|---|---|
committer | GitHub <[email protected]> | 2024-01-09 22:05:30 +1100 |
commit | 8b48f0dea36c192a1a98a2ead3b72412e23d08d6 (patch) | |
tree | a5c42674cd78add9b5ea37bc4a6239208220c1a9 | |
parent | 8b671b99693698f87a4a27c9964f41addb38f2c7 (diff) | |
download | qmk_firmware-8b48f0dea36c192a1a98a2ead3b72412e23d08d6.tar.gz qmk_firmware-8b48f0dea36c192a1a98a2ead3b72412e23d08d6.zip |
MIDI sustain effect fix on qmk 0.22.2 (#22114)
-rw-r--r-- | quantum/process_keycode/process_midi.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 377fcb69e2..5ecd897d16 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c @@ -38,7 +38,7 @@ void process_midi_all_notes_off(void) { #endif // MIDI_BASIC #ifdef MIDI_ADVANCED -static uint8_t tone_status[2][MIDI_TONE_COUNT]; +static uint8_t tone_status[MIDI_TONE_COUNT]; static uint8_t midi_modulation; static int8_t midi_modulation_step; @@ -57,8 +57,7 @@ void midi_init(void) { midi_config.modulation_interval = 8; for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) { - tone_status[0][i] = MIDI_INVALID_NOTE; - tone_status[1][i] = 0; + tone_status[i] = MIDI_INVALID_NOTE; } midi_modulation = 0; @@ -77,21 +76,19 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { uint8_t tone = keycode - MIDI_TONE_MIN; uint8_t velocity = midi_config.velocity; if (record->event.pressed) { - uint8_t note = midi_compute_note(keycode); - midi_send_noteon(&midi_device, channel, note, velocity); - dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); - tone_status[1][tone] += 1; - if (tone_status[0][tone] == MIDI_INVALID_NOTE) { - tone_status[0][tone] = note; + if (tone_status[tone] == MIDI_INVALID_NOTE) { + uint8_t note = midi_compute_note(keycode); + midi_send_noteon(&midi_device, channel, note, velocity); + dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); + tone_status[tone] = note; } } else { - uint8_t note = tone_status[0][tone]; - tone_status[1][tone] -= 1; - if (tone_status[1][tone] == 0) { + uint8_t note = tone_status[tone]; + if (note != MIDI_INVALID_NOTE) { midi_send_noteoff(&midi_device, channel, note, velocity); dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity); - tone_status[0][tone] = MIDI_INVALID_NOTE; } + tone_status[tone] = MIDI_INVALID_NOTE; } return false; } |