diff options
Diffstat (limited to 'quantum/process_keycode')
| -rw-r--r-- | quantum/process_keycode/process_midi.c | 9 | ||||
| -rw-r--r-- | quantum/process_keycode/process_music.c | 22 |
2 files changed, 28 insertions, 3 deletions
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c index 5530ea97c..161f04a24 100644 --- a/quantum/process_keycode/process_midi.c +++ b/quantum/process_keycode/process_midi.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #define MIDI_TONE_KEYCODE_OCTAVES 2 | ||
| 2 | |||
| 3 | #include "process_midi.h" | 1 | #include "process_midi.h" |
| 2 | |||
| 3 | #if defined(MIDI_ENABLE) && defined(MIDI_ADVANCED) | ||
| 4 | |||
| 4 | #include "timer.h" | 5 | #include "timer.h" |
| 5 | 6 | ||
| 6 | static uint8_t tone_status[MIDI_TONE_COUNT]; | 7 | static uint8_t tone_status[MIDI_TONE_COUNT]; |
| @@ -161,7 +162,7 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) | |||
| 161 | dprintf("midi channel %d\n", midi_config.channel); | 162 | dprintf("midi channel %d\n", midi_config.channel); |
| 162 | } | 163 | } |
| 163 | return false; | 164 | return false; |
| 164 | case MI_OFF: | 165 | case MI_ALLOFF: |
| 165 | if (record->event.pressed) { | 166 | if (record->event.pressed) { |
| 166 | midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0); | 167 | midi_send_cc(&midi_device, midi_config.channel, 0x7B, 0); |
| 167 | dprintf("midi off\n"); | 168 | dprintf("midi off\n"); |
| @@ -209,3 +210,5 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) | |||
| 209 | 210 | ||
| 210 | return true; | 211 | return true; |
| 211 | } | 212 | } |
| 213 | |||
| 214 | #endif // MIDI_ADVANCED | ||
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c index 1e2648bff..ac906b628 100644 --- a/quantum/process_keycode/process_music.c +++ b/quantum/process_keycode/process_music.c | |||
| @@ -17,6 +17,7 @@ static uint16_t music_sequence_interval = 100; | |||
| 17 | 17 | ||
| 18 | bool process_music(uint16_t keycode, keyrecord_t *record) { | 18 | bool process_music(uint16_t keycode, keyrecord_t *record) { |
| 19 | 19 | ||
| 20 | #ifdef AUDIO_ENABLE | ||
| 20 | if (keycode == AU_ON && record->event.pressed) { | 21 | if (keycode == AU_ON && record->event.pressed) { |
| 21 | audio_on(); | 22 | audio_on(); |
| 22 | return false; | 23 | return false; |
| @@ -38,6 +39,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 38 | } | 39 | } |
| 39 | return false; | 40 | return false; |
| 40 | } | 41 | } |
| 42 | #endif // AUDIO_ENABLE | ||
| 41 | 43 | ||
| 42 | if (keycode == MU_ON && record->event.pressed) { | 44 | if (keycode == MU_ON && record->event.pressed) { |
| 43 | music_on(); | 45 | music_on(); |
| @@ -61,6 +63,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 61 | return false; | 63 | return false; |
| 62 | } | 64 | } |
| 63 | 65 | ||
| 66 | #ifdef AUDIO_ENABLE | ||
| 64 | if (keycode == MUV_IN && record->event.pressed) { | 67 | if (keycode == MUV_IN && record->event.pressed) { |
| 65 | voice_iterate(); | 68 | voice_iterate(); |
| 66 | music_scale_user(); | 69 | music_scale_user(); |
| @@ -72,11 +75,14 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 72 | music_scale_user(); | 75 | music_scale_user(); |
| 73 | return false; | 76 | return false; |
| 74 | } | 77 | } |
| 78 | #endif // AUDIO_ENABLE | ||
| 75 | 79 | ||
| 76 | if (music_activated) { | 80 | if (music_activated) { |
| 77 | 81 | ||
| 78 | if (keycode == KC_LCTL && record->event.pressed) { // Start recording | 82 | if (keycode == KC_LCTL && record->event.pressed) { // Start recording |
| 83 | #ifdef AUDIO_ENABLE | ||
| 79 | stop_all_notes(); | 84 | stop_all_notes(); |
| 85 | #endif | ||
| 80 | music_sequence_recording = true; | 86 | music_sequence_recording = true; |
| 81 | music_sequence_recorded = false; | 87 | music_sequence_recorded = false; |
| 82 | music_sequence_playing = false; | 88 | music_sequence_playing = false; |
| @@ -85,7 +91,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 85 | } | 91 | } |
| 86 | 92 | ||
| 87 | if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing | 93 | if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing |
| 94 | #ifdef AUDIO_ENABLE | ||
| 88 | stop_all_notes(); | 95 | stop_all_notes(); |
| 96 | #endif | ||
| 89 | if (music_sequence_recording) { // was recording | 97 | if (music_sequence_recording) { // was recording |
| 90 | music_sequence_recorded = true; | 98 | music_sequence_recorded = true; |
| 91 | } | 99 | } |
| @@ -95,7 +103,9 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 95 | } | 103 | } |
| 96 | 104 | ||
| 97 | if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing | 105 | if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing |
| 106 | #ifdef AUDIO_ENABLE | ||
| 98 | stop_all_notes(); | 107 | stop_all_notes(); |
| 108 | #endif | ||
| 99 | music_sequence_recording = false; | 109 | music_sequence_recording = false; |
| 100 | music_sequence_playing = true; | 110 | music_sequence_playing = true; |
| 101 | music_sequence_position = 0; | 111 | music_sequence_position = 0; |
| @@ -116,6 +126,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 116 | } | 126 | } |
| 117 | #define MUSIC_MODE_GUITAR | 127 | #define MUSIC_MODE_GUITAR |
| 118 | 128 | ||
| 129 | #ifdef AUDIO_ENABLE | ||
| 119 | #ifdef MUSIC_MODE_CHROMATIC | 130 | #ifdef MUSIC_MODE_CHROMATIC |
| 120 | float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row)); | 131 | float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + record->event.key.col + music_offset)/12.0+(MATRIX_ROWS - record->event.key.row)); |
| 121 | #elif defined(MUSIC_MODE_GUITAR) | 132 | #elif defined(MUSIC_MODE_GUITAR) |
| @@ -125,15 +136,20 @@ bool process_music(uint16_t keycode, keyrecord_t *record) { | |||
| 125 | #else | 136 | #else |
| 126 | float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row)); | 137 | float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row)); |
| 127 | #endif | 138 | #endif |
| 139 | #endif // AUDIO_ENABLE | ||
| 128 | 140 | ||
| 129 | if (record->event.pressed) { | 141 | if (record->event.pressed) { |
| 142 | #ifdef AUDIO_ENABLE | ||
| 130 | play_note(freq, 0xF); | 143 | play_note(freq, 0xF); |
| 131 | if (music_sequence_recording) { | 144 | if (music_sequence_recording) { |
| 132 | music_sequence[music_sequence_count] = freq; | 145 | music_sequence[music_sequence_count] = freq; |
| 133 | music_sequence_count++; | 146 | music_sequence_count++; |
| 134 | } | 147 | } |
| 148 | #endif | ||
| 135 | } else { | 149 | } else { |
| 150 | #ifdef AUDIO_ENABLE | ||
| 136 | stop_note(freq); | 151 | stop_note(freq); |
| 152 | #endif | ||
| 137 | } | 153 | } |
| 138 | 154 | ||
| 139 | if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through | 155 | if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through |
| @@ -161,15 +177,19 @@ void music_on(void) { | |||
| 161 | 177 | ||
| 162 | void music_off(void) { | 178 | void music_off(void) { |
| 163 | music_activated = 0; | 179 | music_activated = 0; |
| 180 | #ifdef AUDIO_ENABLE | ||
| 164 | stop_all_notes(); | 181 | stop_all_notes(); |
| 182 | #endif | ||
| 165 | } | 183 | } |
| 166 | 184 | ||
| 167 | 185 | ||
| 168 | __attribute__ ((weak)) | 186 | __attribute__ ((weak)) |
| 169 | void music_on_user() {} | 187 | void music_on_user() {} |
| 170 | 188 | ||
| 189 | #ifdef AUDIO_ENABLE | ||
| 171 | __attribute__ ((weak)) | 190 | __attribute__ ((weak)) |
| 172 | void audio_on_user() {} | 191 | void audio_on_user() {} |
| 192 | #endif | ||
| 173 | 193 | ||
| 174 | __attribute__ ((weak)) | 194 | __attribute__ ((weak)) |
| 175 | void music_scale_user() {} | 195 | void music_scale_user() {} |
| @@ -178,8 +198,10 @@ void matrix_scan_music(void) { | |||
| 178 | if (music_sequence_playing) { | 198 | if (music_sequence_playing) { |
| 179 | if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) { | 199 | if ((music_sequence_timer == 0) || (timer_elapsed(music_sequence_timer) > music_sequence_interval)) { |
| 180 | music_sequence_timer = timer_read(); | 200 | music_sequence_timer = timer_read(); |
| 201 | #ifdef AUDIO_ENABLE | ||
| 181 | stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]); | 202 | stop_note(music_sequence[(music_sequence_position - 1 < 0)?(music_sequence_position - 1 + music_sequence_count):(music_sequence_position - 1)]); |
| 182 | play_note(music_sequence[music_sequence_position], 0xF); | 203 | play_note(music_sequence[music_sequence_position], 0xF); |
| 204 | #endif | ||
| 183 | music_sequence_position = (music_sequence_position + 1) % music_sequence_count; | 205 | music_sequence_position = (music_sequence_position + 1) % music_sequence_count; |
| 184 | } | 206 | } |
| 185 | } | 207 | } |
