aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack Humbert <jack.humb@gmail.com>2016-05-18 23:14:00 -0400
committerJack Humbert <jack.humb@gmail.com>2016-05-18 23:14:00 -0400
commit0428214b905e5f8b3bed721885957ce249ba4991 (patch)
treee307462b501d077bb3aec774ebeb15e5f95dd5d7
parent465aabe11dbd673fb4c68ecbffbfb062273def1a (diff)
downloadqmk_firmware-0428214b905e5f8b3bed721885957ce249ba4991.tar.gz
qmk_firmware-0428214b905e5f8b3bed721885957ce249ba4991.zip
adds music and audio toggles (#337)
* Updated personal layouts * tweaked personal * Nightly - Audio Cleanup Refactored the LUTs. Abstracted some of the registers out of audio to use more functional names. Split audio into audio and audio_pwm. WIP * nightly - collapsed code * Added check for note playing to LEDs * Usability tweaks * TWEAE * nightly added extra kcs to keymap common * turned on Plank audio * Added backlight breathing to atomic * reverted accidental merge * Added music and audio toggles to Quantum.c * Redid the audio callbacks * music/audio_on_user
-rw-r--r--keyboard/atomic/keymaps/pvc/keymap.c48
-rw-r--r--quantum/audio/audio.c8
-rw-r--r--quantum/audio/audio.h6
-rw-r--r--quantum/keymap_common.h14
-rw-r--r--quantum/quantum.c75
-rw-r--r--quantum/quantum.h7
6 files changed, 114 insertions, 44 deletions
diff --git a/keyboard/atomic/keymaps/pvc/keymap.c b/keyboard/atomic/keymaps/pvc/keymap.c
index ff7384268..8431654d7 100644
--- a/keyboard/atomic/keymaps/pvc/keymap.c
+++ b/keyboard/atomic/keymaps/pvc/keymap.c
@@ -15,8 +15,7 @@
15#define LAYER_LOWER 4 15#define LAYER_LOWER 4
16#define LAYER_FUNCTION 5 16#define LAYER_FUNCTION 5
17#define LAYER_MOUSE 6 17#define LAYER_MOUSE 6
18#define LAYER_MUSIC 7 18#define LAYER_ADJUST 7
19#define LAYER_ADJUST 8
20 19
21#define MACRO_QWERTY 0 20#define MACRO_QWERTY 0
22#define MACRO_COLEMAK 1 21#define MACRO_COLEMAK 1
@@ -63,8 +62,8 @@
63#define M_BDFLT M(MACRO_BREATH_DEFAULT) 62#define M_BDFLT M(MACRO_BREATH_DEFAULT)
64 63
65 64
66#define MUS_TOG M(MACRO_MUSIC_TOGGLE) 65//#define MU_TOG M(MACRO_MUSIC_TOGGLE)
67#define AUD_TOG M(MACRO_AUDIO_TOGGLE) 66//#define AU_TOG M(MACRO_AUDIO_TOGGLE)
68#define VC_UP M(MACRO_INC_VOICE) 67#define VC_UP M(MACRO_INC_VOICE)
69#define VC_DOWN M(MACRO_DEC_VOICE) 68#define VC_DOWN M(MACRO_DEC_VOICE)
70 69
@@ -219,20 +218,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
219 218
220#endif 219#endif
221 220
222 [LAYER_MUSIC] = { // MUSIC
223 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
224 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
225 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
226 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
227 { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
228 },
229
230 [LAYER_ADJUST] = { // ADJUST 221 [LAYER_ADJUST] = { // ADJUST
231 { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MUS_TOG, AUD_TOG, ________________ }, 222 { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ },
232 { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, 223 { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
233 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, 224 { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
234 { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ }, 225 { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ },
235 { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ }, 226 { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ },
236 }, 227 },
237 228
238 229
@@ -259,13 +250,14 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND);
259 250
260float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); 251float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
261float tone_music_on[][2] = SONG(DOE_A_DEER); 252float tone_music_on[][2] = SONG(DOE_A_DEER);
253float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
254
262float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); 255float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
263float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); 256float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
264float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); 257float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
265float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); 258float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
266float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); 259float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
267float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); 260float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
268float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
269 261
270#endif /* AUDIO_ENABLE */ 262#endif /* AUDIO_ENABLE */
271 263
@@ -434,6 +426,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
434 } 426 }
435 break; 427 break;
436 428
429/*
437 case MACRO_AUDIO_TOGGLE: 430 case MACRO_AUDIO_TOGGLE:
438 if (record->event.pressed) 431 if (record->event.pressed)
439 { 432 {
@@ -464,7 +457,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
464 } 457 }
465 } 458 }
466 break; 459 break;
467
468 case MACRO_INC_VOICE: 460 case MACRO_INC_VOICE:
469 if (record->event.pressed) 461 if (record->event.pressed)
470 { 462 {
@@ -484,6 +476,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
484 #endif 476 #endif
485 } 477 }
486 break; 478 break;
479*/
487 480
488#endif /* AUDIO_ENABLE */ 481#endif /* AUDIO_ENABLE */
489 482
@@ -505,8 +498,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
505 498
506#ifdef AUDIO_ENABLE 499#ifdef AUDIO_ENABLE
507 500
508 501/*
509void process_action_user(keyrecord_t *record) 502bool process_action_user(keyrecord_t *record)
510{ 503{
511 504
512 uint8_t starting_note = 0x0C; 505 uint8_t starting_note = 0x0C;
@@ -524,7 +517,7 @@ void process_action_user(keyrecord_t *record)
524 } 517 }
525 } 518 }
526} 519}
527 520*/
528 521
529void matrix_init_user(void) 522void matrix_init_user(void)
530{ 523{
@@ -590,4 +583,19 @@ void play_goodbye_tone()
590 stop_all_notes(); 583 stop_all_notes();
591} 584}
592 585
586void play_audio_on_tone(void)
587{
588 PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
589}
590
591void play_music_on_tone(void)
592{
593 PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
594}
595
596void play_music_scale(void)
597{
598 PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
599}
600
593#endif /* AUDIO_ENABLE */ \ No newline at end of file 601#endif /* AUDIO_ENABLE */ \ No newline at end of file
diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c
index 243f49f0e..32f64417e 100644
--- a/quantum/audio/audio.c
+++ b/quantum/audio/audio.c
@@ -381,11 +381,14 @@ bool is_audio_on(void) {
381void audio_toggle(void) { 381void audio_toggle(void) {
382 audio_config.enable ^= 1; 382 audio_config.enable ^= 1;
383 eeconfig_update_audio(audio_config.raw); 383 eeconfig_update_audio(audio_config.raw);
384 if (audio_config.enable)
385 audio_on_user();
384} 386}
385 387
386void audio_on(void) { 388void audio_on(void) {
387 audio_config.enable = 1; 389 audio_config.enable = 1;
388 eeconfig_update_audio(audio_config.raw); 390 eeconfig_update_audio(audio_config.raw);
391 audio_on_user();
389} 392}
390 393
391void audio_off(void) { 394void audio_off(void) {
@@ -484,5 +487,8 @@ __attribute__ ((weak))
484void play_goodbye_tone() {} 487void play_goodbye_tone() {}
485 488
486__attribute__ ((weak)) 489__attribute__ ((weak))
487void audio_on_callback(void) {} 490void audio_on_user() {}
491
492__attribute__ ((weak))
493void play_music_scale() {}
488//------------------------------------------------------------------------------ 494//------------------------------------------------------------------------------
diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h
index fe8506131..b46f587bb 100644
--- a/quantum/audio/audio.h
+++ b/quantum/audio/audio.h
@@ -29,7 +29,6 @@ bool is_audio_on(void);
29void audio_toggle(void); 29void audio_toggle(void);
30void audio_on(void); 30void audio_on(void);
31void audio_off(void); 31void audio_off(void);
32void audio_on_callback(void);
33 32
34// Vibrato rate functions 33// Vibrato rate functions
35 34
@@ -87,9 +86,10 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest)
87 86
88 87
89bool is_playing_notes(void); 88bool is_playing_notes(void);
89
90void play_goodbye_tone(void); 90void play_goodbye_tone(void);
91void play_startup_tone(void); 91void play_startup_tone(void);
92 92void audio_on_user(void);
93 93void play_music_scale(void);
94 94
95#endif \ No newline at end of file 95#endif \ No newline at end of file
diff --git a/quantum/keymap_common.h b/quantum/keymap_common.h
index 07020150a..1cbe8c61c 100644
--- a/quantum/keymap_common.h
+++ b/quantum/keymap_common.h
@@ -224,18 +224,20 @@ extern const uint16_t fn_actions[];
224// Audio on/off 224// Audio on/off
225#define AU_ON 0x5020 225#define AU_ON 0x5020
226#define AU_OFF 0x5021 226#define AU_OFF 0x5021
227#define AU_TOG 0x5022
227 228
228// Music mode on/off 229// Music mode on/off
229#define MU_ON 0x5022 230#define MU_ON 0x5023
230#define MU_OFF 0x5023 231#define MU_OFF 0x5024
232#define MU_TOG 0x5025
231 233
232// Music voice iterate 234// Music voice iterate
233#define MUV_IN 0x5024 235#define MUV_IN 0x5026
234#define MUV_DE 0x5025 236#define MUV_DE 0x5027
235 237
236// Midi mode on/off 238// Midi mode on/off
237#define MI_ON 0x5026 239#define MI_ON 0x5028
238#define MI_OFF 0x5027 240#define MI_OFF 0x5029
239 241
240// GOTO layer - 16 layers max 242// GOTO layer - 16 layers max
241// when: 243// when:
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 5a978d332..e4d7b9185 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -1,4 +1,5 @@
1#include "quantum.h" 1#include "quantum.h"
2#include "timer.h"
2 3
3__attribute__ ((weak)) 4__attribute__ ((weak))
4void matrix_init_kb(void) {} 5void matrix_init_kb(void) {}
@@ -17,11 +18,11 @@ void leader_start(void) {}
17__attribute__ ((weak)) 18__attribute__ ((weak))
18void leader_end(void) {} 19void leader_end(void) {}
19 20
21uint8_t starting_note = 0x0C;
22int offset = 7;
23
20#ifdef AUDIO_ENABLE 24#ifdef AUDIO_ENABLE
21 uint8_t starting_note = 0x0C;
22 int offset = 7;
23 bool music_activated = false; 25 bool music_activated = false;
24 float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
25#endif 26#endif
26 27
27#ifdef MIDI_ENABLE 28#ifdef MIDI_ENABLE
@@ -105,7 +106,7 @@ bool process_record_quantum(keyrecord_t *record) {
105 #ifdef MIDI_ENABLE 106 #ifdef MIDI_ENABLE
106 if (keycode == MI_ON && record->event.pressed) { 107 if (keycode == MI_ON && record->event.pressed) {
107 midi_activated = true; 108 midi_activated = true;
108 PLAY_NOTE_ARRAY(music_scale, false, 0); 109 play_music_scale();
109 return false; 110 return false;
110 } 111 }
111 112
@@ -181,7 +182,6 @@ bool process_record_quantum(keyrecord_t *record) {
181 #ifdef AUDIO_ENABLE 182 #ifdef AUDIO_ENABLE
182 if (keycode == AU_ON && record->event.pressed) { 183 if (keycode == AU_ON && record->event.pressed) {
183 audio_on(); 184 audio_on();
184 audio_on_callback();
185 return false; 185 return false;
186 } 186 }
187 187
@@ -190,31 +190,53 @@ bool process_record_quantum(keyrecord_t *record) {
190 return false; 190 return false;
191 } 191 }
192 192
193 if (keycode == AU_TOG && record->event.pressed) {
194 if (is_audio_on())
195 {
196 audio_off();
197 }
198 else
199 {
200 audio_on();
201 }
202 return false;
203 }
204
193 if (keycode == MU_ON && record->event.pressed) { 205 if (keycode == MU_ON && record->event.pressed) {
194 music_activated = true; 206 music_on();
195 PLAY_NOTE_ARRAY(music_scale, false, 0);
196 return false; 207 return false;
197 } 208 }
198 209
199 if (keycode == MU_OFF && record->event.pressed) { 210 if (keycode == MU_OFF && record->event.pressed) {
200 music_activated = false; 211 music_off();
201 stop_all_notes();
202 return false; 212 return false;
203 } 213 }
204 214
215 if (keycode == MU_TOG && record->event.pressed) {
216 if (music_activated)
217 {
218 music_off();
219 }
220 else
221 {
222 music_on();
223 }
224 return false;
225 }
226
205 if (keycode == MUV_IN && record->event.pressed) { 227 if (keycode == MUV_IN && record->event.pressed) {
206 voice_iterate(); 228 voice_iterate();
207 PLAY_NOTE_ARRAY(music_scale, false, 0); 229 play_music_scale();
208 return false; 230 return false;
209 } 231 }
210 232
211 if (keycode == MUV_DE && record->event.pressed) { 233 if (keycode == MUV_DE && record->event.pressed) {
212 voice_deiterate(); 234 voice_deiterate();
213 PLAY_NOTE_ARRAY(music_scale, false, 0); 235 play_music_scale();
214 return false; 236 return false;
215 } 237 }
216 238
217 if (music_activated) { 239 if (music_activated) {
218 240
219 if (keycode == KC_LCTL && record->event.pressed) { // Start recording 241 if (keycode == KC_LCTL && record->event.pressed) { // Start recording
220 stop_all_notes(); 242 stop_all_notes();
@@ -258,7 +280,7 @@ bool process_record_quantum(keyrecord_t *record) {
258 } 280 }
259 } else { 281 } else {
260 stop_note(freq); 282 stop_note(freq);
261 } 283 }
262 284
263 if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through 285 if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through
264 return false; 286 return false;
@@ -347,4 +369,29 @@ void matrix_scan_quantum() {
347 #endif 369 #endif
348 370
349 matrix_scan_kb(); 371 matrix_scan_kb();
350} \ No newline at end of file 372}
373
374bool is_music_on(void) {
375 return (music_activated != 0);
376}
377
378void music_toggle(void) {
379 if (!music_activated) {
380 music_on();
381 } else {
382 music_off();
383 }
384}
385
386void music_on(void) {
387 music_activated = 1;
388 music_on_user();
389}
390
391void music_off(void) {
392 music_activated = 0;
393 stop_all_notes();
394}
395
396__attribute__ ((weak))
397void music_on_user() {} \ No newline at end of file
diff --git a/quantum/quantum.h b/quantum/quantum.h
index bfecdb262..f4d8f09d4 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -46,4 +46,11 @@ void leader_end(void);
46#define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size 46#define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size
47#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT) 47#define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT)
48 48
49bool is_music_on(void);
50void music_toggle(void);
51void music_on(void);
52void music_off(void);
53
54void music_on_user(void);
55
49#endif \ No newline at end of file 56#endif \ No newline at end of file