diff options
| author | Jack Humbert <jack.humb@gmail.com> | 2016-05-18 23:14:00 -0400 |
|---|---|---|
| committer | Jack Humbert <jack.humb@gmail.com> | 2016-05-18 23:14:00 -0400 |
| commit | 0428214b905e5f8b3bed721885957ce249ba4991 (patch) | |
| tree | e307462b501d077bb3aec774ebeb15e5f95dd5d7 | |
| parent | 465aabe11dbd673fb4c68ecbffbfb062273def1a (diff) | |
| download | qmk_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.c | 48 | ||||
| -rw-r--r-- | quantum/audio/audio.c | 8 | ||||
| -rw-r--r-- | quantum/audio/audio.h | 6 | ||||
| -rw-r--r-- | quantum/keymap_common.h | 14 | ||||
| -rw-r--r-- | quantum/quantum.c | 75 | ||||
| -rw-r--r-- | quantum/quantum.h | 7 |
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 | ||
| 260 | float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); | 251 | float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); |
| 261 | float tone_music_on[][2] = SONG(DOE_A_DEER); | 252 | float tone_music_on[][2] = SONG(DOE_A_DEER); |
| 253 | float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); | ||
| 254 | |||
| 262 | float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); | 255 | float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); |
| 263 | float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); | 256 | float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); |
| 264 | float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); | 257 | float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); |
| 265 | float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); | 258 | float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); |
| 266 | float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); | 259 | float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); |
| 267 | float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); | 260 | float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); |
| 268 | float 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 | /* | |
| 509 | void process_action_user(keyrecord_t *record) | 502 | bool 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 | ||
| 529 | void matrix_init_user(void) | 522 | void 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 | ||
| 586 | void play_audio_on_tone(void) | ||
| 587 | { | ||
| 588 | PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); | ||
| 589 | } | ||
| 590 | |||
| 591 | void play_music_on_tone(void) | ||
| 592 | { | ||
| 593 | PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); | ||
| 594 | } | ||
| 595 | |||
| 596 | void 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) { | |||
| 381 | void audio_toggle(void) { | 381 | void 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 | ||
| 386 | void audio_on(void) { | 388 | void 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 | ||
| 391 | void audio_off(void) { | 394 | void audio_off(void) { |
| @@ -484,5 +487,8 @@ __attribute__ ((weak)) | |||
| 484 | void play_goodbye_tone() {} | 487 | void play_goodbye_tone() {} |
| 485 | 488 | ||
| 486 | __attribute__ ((weak)) | 489 | __attribute__ ((weak)) |
| 487 | void audio_on_callback(void) {} | 490 | void audio_on_user() {} |
| 491 | |||
| 492 | __attribute__ ((weak)) | ||
| 493 | void 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); | |||
| 29 | void audio_toggle(void); | 29 | void audio_toggle(void); |
| 30 | void audio_on(void); | 30 | void audio_on(void); |
| 31 | void audio_off(void); | 31 | void audio_off(void); |
| 32 | void 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 | ||
| 89 | bool is_playing_notes(void); | 88 | bool is_playing_notes(void); |
| 89 | |||
| 90 | void play_goodbye_tone(void); | 90 | void play_goodbye_tone(void); |
| 91 | void play_startup_tone(void); | 91 | void play_startup_tone(void); |
| 92 | 92 | void audio_on_user(void); | |
| 93 | 93 | void 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)) |
| 4 | void matrix_init_kb(void) {} | 5 | void matrix_init_kb(void) {} |
| @@ -17,11 +18,11 @@ void leader_start(void) {} | |||
| 17 | __attribute__ ((weak)) | 18 | __attribute__ ((weak)) |
| 18 | void leader_end(void) {} | 19 | void leader_end(void) {} |
| 19 | 20 | ||
| 21 | uint8_t starting_note = 0x0C; | ||
| 22 | int 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 | |||
| 374 | bool is_music_on(void) { | ||
| 375 | return (music_activated != 0); | ||
| 376 | } | ||
| 377 | |||
| 378 | void music_toggle(void) { | ||
| 379 | if (!music_activated) { | ||
| 380 | music_on(); | ||
| 381 | } else { | ||
| 382 | music_off(); | ||
| 383 | } | ||
| 384 | } | ||
| 385 | |||
| 386 | void music_on(void) { | ||
| 387 | music_activated = 1; | ||
| 388 | music_on_user(); | ||
| 389 | } | ||
| 390 | |||
| 391 | void music_off(void) { | ||
| 392 | music_activated = 0; | ||
| 393 | stop_all_notes(); | ||
| 394 | } | ||
| 395 | |||
| 396 | __attribute__ ((weak)) | ||
| 397 | void 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 | ||
| 49 | bool is_music_on(void); | ||
| 50 | void music_toggle(void); | ||
| 51 | void music_on(void); | ||
| 52 | void music_off(void); | ||
| 53 | |||
| 54 | void music_on_user(void); | ||
| 55 | |||
| 49 | #endif \ No newline at end of file | 56 | #endif \ No newline at end of file |
