MIDI sustain effect fix on qmk 0.22.2 (#22114)

This commit is contained in:
3araht 2024-01-09 20:05:30 +09:00 committed by GitHub
parent 8b671b9969
commit 8b48f0dea3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -38,7 +38,7 @@ void process_midi_all_notes_off(void) {
#endif // MIDI_BASIC #endif // MIDI_BASIC
#ifdef MIDI_ADVANCED #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 uint8_t midi_modulation;
static int8_t midi_modulation_step; static int8_t midi_modulation_step;
@ -57,8 +57,7 @@ void midi_init(void) {
midi_config.modulation_interval = 8; midi_config.modulation_interval = 8;
for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) { for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) {
tone_status[0][i] = MIDI_INVALID_NOTE; tone_status[i] = MIDI_INVALID_NOTE;
tone_status[1][i] = 0;
} }
midi_modulation = 0; 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 tone = keycode - MIDI_TONE_MIN;
uint8_t velocity = midi_config.velocity; uint8_t velocity = midi_config.velocity;
if (record->event.pressed) { if (record->event.pressed) {
uint8_t note = midi_compute_note(keycode); if (tone_status[tone] == MIDI_INVALID_NOTE) {
midi_send_noteon(&midi_device, channel, note, velocity); uint8_t note = midi_compute_note(keycode);
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity); midi_send_noteon(&midi_device, channel, note, velocity);
tone_status[1][tone] += 1; dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
if (tone_status[0][tone] == MIDI_INVALID_NOTE) { tone_status[tone] = note;
tone_status[0][tone] = note;
} }
} else { } else {
uint8_t note = tone_status[0][tone]; uint8_t note = tone_status[tone];
tone_status[1][tone] -= 1; if (note != MIDI_INVALID_NOTE) {
if (tone_status[1][tone] == 0) {
midi_send_noteoff(&midi_device, channel, note, velocity); midi_send_noteoff(&midi_device, channel, note, velocity);
dprintf("midi noteoff channel:%d note:%d velocity:%d\n", 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; return false;
} }