Browse Source

Merge remote-tracking branch 'origin/develop' into xap

QMK Bot 2 years ago
parent
commit
f5fa2cdafb
1 changed files with 10 additions and 13 deletions
  1. 10 13
      quantum/process_keycode/process_midi.c

+ 10 - 13
quantum/process_keycode/process_midi.c

@@ -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[1][i] = 0;
+        tone_status[i] = MIDI_INVALID_NOTE;
     }
     }
 
 
     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);
-                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 {
             } 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);
                     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;
         }
         }