diff options
Diffstat (limited to 'quantum/process_keycode/process_music.c')
-rw-r--r-- | quantum/process_keycode/process_music.c | 22 |
1 files changed, 22 insertions, 0 deletions
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 | } |