forked from mirrors/qmk_firmware
MIDI sustain effect fix on qmk 0.22.2 (#22114)
This commit is contained in:
parent
8b671b9969
commit
8b48f0dea3
1 changed files with 10 additions and 13 deletions
|
@ -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) {
|
||||||
|
if (tone_status[tone] == MIDI_INVALID_NOTE) {
|
||||||
uint8_t note = midi_compute_note(keycode);
|
uint8_t note = midi_compute_note(keycode);
|
||||||
midi_send_noteon(&midi_device, channel, note, velocity);
|
midi_send_noteon(&midi_device, channel, note, velocity);
|
||||||
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
|
dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
|
||||||
tone_status[1][tone] += 1;
|
tone_status[tone] = note;
|
||||||
if (tone_status[0][tone] == MIDI_INVALID_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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue