diff options
Diffstat (limited to 'quantum/process_keycode/process_midi.c')
-rw-r--r-- | quantum/process_keycode/process_midi.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index e52577014..8e2fb955e 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c | |||
@@ -41,12 +41,12 @@ static int8_t midi_modulation_step; | |||
41 | static uint16_t midi_modulation_timer; | 41 | static uint16_t midi_modulation_timer; |
42 | midi_config_t midi_config; | 42 | midi_config_t midi_config; |
43 | 43 | ||
44 | inline uint8_t compute_velocity(uint8_t setting) { return (setting + 1) * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN + 1)); } | 44 | inline uint8_t compute_velocity(uint8_t setting) { return setting * (128 / (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN)); } |
45 | 45 | ||
46 | void midi_init(void) { | 46 | void midi_init(void) { |
47 | midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN; | 47 | midi_config.octave = MI_OCT_2 - MIDI_OCTAVE_MIN; |
48 | midi_config.transpose = 0; | 48 | midi_config.transpose = 0; |
49 | midi_config.velocity = (MIDI_VELOCITY_MAX - MIDI_VELOCITY_MIN); | 49 | midi_config.velocity = 127; |
50 | midi_config.channel = 0; | 50 | midi_config.channel = 0; |
51 | midi_config.modulation_interval = 8; | 51 | midi_config.modulation_interval = 8; |
52 | 52 | ||
@@ -66,7 +66,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { | |||
66 | case MIDI_TONE_MIN ... MIDI_TONE_MAX: { | 66 | case MIDI_TONE_MIN ... MIDI_TONE_MAX: { |
67 | uint8_t channel = midi_config.channel; | 67 | uint8_t channel = midi_config.channel; |
68 | uint8_t tone = keycode - MIDI_TONE_MIN; | 68 | uint8_t tone = keycode - MIDI_TONE_MIN; |
69 | uint8_t velocity = compute_velocity(midi_config.velocity); | 69 | uint8_t velocity = midi_config.velocity; |
70 | if (record->event.pressed) { | 70 | if (record->event.pressed) { |
71 | if (tone_status[tone] == MIDI_INVALID_NOTE) { | 71 | if (tone_status[tone] == MIDI_INVALID_NOTE) { |
72 | uint8_t note = midi_compute_note(keycode); | 72 | uint8_t note = midi_compute_note(keycode); |
@@ -124,19 +124,30 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) { | |||
124 | return false; | 124 | return false; |
125 | case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: | 125 | case MIDI_VELOCITY_MIN ... MIDI_VELOCITY_MAX: |
126 | if (record->event.pressed) { | 126 | if (record->event.pressed) { |
127 | midi_config.velocity = keycode - MIDI_VELOCITY_MIN; | 127 | midi_config.velocity = compute_velocity(keycode - MIDI_VELOCITY_MIN); |
128 | dprintf("midi velocity %d\n", midi_config.velocity); | 128 | dprintf("midi velocity %d\n", midi_config.velocity); |
129 | } | 129 | } |
130 | return false; | 130 | return false; |
131 | case MI_VELD: | 131 | case MI_VELD: |
132 | if (record->event.pressed && midi_config.velocity > 0) { | 132 | if (record->event.pressed && midi_config.velocity > 0) { |
133 | midi_config.velocity--; | 133 | if (midi_config.velocity == 127) { |
134 | midi_config.velocity -= 10; | ||
135 | } else if (midi_config.velocity > 12) { | ||
136 | midi_config.velocity -= 13; | ||
137 | } else { | ||
138 | midi_config.velocity = 0; | ||
139 | } | ||
140 | |||
134 | dprintf("midi velocity %d\n", midi_config.velocity); | 141 | dprintf("midi velocity %d\n", midi_config.velocity); |
135 | } | 142 | } |
136 | return false; | 143 | return false; |
137 | case MI_VELU: | 144 | case MI_VELU: |
138 | if (record->event.pressed) { | 145 | if (record->event.pressed && midi_config.velocity < 127) { |
139 | midi_config.velocity++; | 146 | if (midi_config.velocity < 115) { |
147 | midi_config.velocity += 13; | ||
148 | } else { | ||
149 | midi_config.velocity = 127; | ||
150 | } | ||
140 | dprintf("midi velocity %d\n", midi_config.velocity); | 151 | dprintf("midi velocity %d\n", midi_config.velocity); |
141 | } | 152 | } |
142 | return false; | 153 | return false; |