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
6 files changed, 114 insertions(+), 44 deletions(-) M keyboard/atomic/keymaps/pvc/keymap.c M quantum/audio/audio.c M quantum/audio/audio.h M quantum/keymap_common.h M quantum/quantum.c M quantum/quantum.h
M keyboard/atomic/keymaps/pvc/keymap.c => keyboard/atomic/keymaps/pvc/keymap.c +28 -20
@@ 15,8 15,7 @@ #define LAYER_LOWER 4 #define LAYER_FUNCTION 5 #define LAYER_MOUSE 6 #define LAYER_MUSIC 7 #define LAYER_ADJUST 8 #define LAYER_ADJUST 7 #define MACRO_QWERTY 0 @@ #define MACRO_COLEMAK 1 63,8 62,8 @@ #define M_BDFLT M(MACRO_BREATH_DEFAULT) #define MUS_TOG M(MACRO_MUSIC_TOGGLE) #define AUD_TOG M(MACRO_AUDIO_TOGGLE) //#define MU_TOG M(MACRO_MUSIC_TOGGLE) //#define AU_TOG M(MACRO_AUDIO_TOGGLE) #define VC_UP M(MACRO_INC_VOICE) #define VC_DOWN M(MACRO_DEC_VOICE) @@ 219,20 218,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { #endif [LAYER_MUSIC] = { // MUSIC { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX }, }, [LAYER_ADJUST] = { // ADJUST { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MUS_TOG, AUD_TOG, ________________ }, { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ }, { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }, { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ }, { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, VC_UP, _______ }, { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, VC_DOWN, _______ }, { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ }, { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ }, }, @@ 259,13 250,14 @@ float tone_colemak[][2] = SONG(COLEMAK_SOUND); float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE); float tone_music_on[][2] = SONG(DOE_A_DEER); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND); float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND); float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND); float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND); float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND); float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND); float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif /* AUDIO_ENABLE */ @@ 434,6 426,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; /* case MACRO_AUDIO_TOGGLE: if (record->event.pressed) @@ { 464,7 457,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } } break; case MACRO_INC_VOICE: if (record->event.pressed) @@ { 484,6 476,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #endif } break; */ #endif /* AUDIO_ENABLE */ @@ 505,8 498,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) #ifdef AUDIO_ENABLE void process_action_user(keyrecord_t *record) /* bool process_action_user(keyrecord_t *record) { @@ uint8_t starting_note = 0x0C; 524,7 517,7 @@ void process_action_user(keyrecord_t *record) } } } */ void matrix_init_user(void) @@ { 590,4 583,19 @@ void play_goodbye_tone() stop_all_notes(); } void play_audio_on_tone(void) { PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO); } void play_music_on_tone(void) { PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO); } void play_music_scale(void) { PLAY_NOTE_ARRAY(music_scale, false, STACCATO); } #endif /* AUDIO_ENABLE */ \ No newline at end of file
M quantum/audio/audio.c => quantum/audio/audio.c +7 -1
@@ 381,11 381,14 @@ bool is_audio_on(void) { void audio_toggle(void) { audio_config.enable ^= 1; eeconfig_update_audio(audio_config.raw); if (audio_config.enable) audio_on_user(); } void audio_on(void) { audio_config.enable = 1; eeconfig_update_audio(audio_config.raw); audio_on_user(); } @@ void audio_off(void) { 484,5 487,8 @@ __attribute__ ((weak)) void play_goodbye_tone() {} __attribute__ ((weak)) void audio_on_callback(void) {} void audio_on_user() {} __attribute__ ((weak)) void play_music_scale() {} //------------------------------------------------------------------------------
M quantum/audio/audio.h => quantum/audio/audio.h +3 -3
@@ 29,7 29,6 @@ bool is_audio_on(void); void audio_toggle(void); void audio_on(void); void audio_off(void); void audio_on_callback(void); // Vibrato rate functions @@ 87,9 86,10 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat, float n_rest) bool is_playing_notes(void); void play_goodbye_tone(void); void play_startup_tone(void); void audio_on_user(void); void play_music_scale(void); #endif \ No newline at end of file
M quantum/keymap_common.h => quantum/keymap_common.h +8 -6
@@ 224,18 224,20 @@ extern const uint16_t fn_actions[]; // Audio on/off #define AU_ON 0x5020 #define AU_OFF 0x5021 #define AU_TOG 0x5022 // Music mode on/off #define MU_ON 0x5022 #define MU_OFF 0x5023 #define MU_ON 0x5023 #define MU_OFF 0x5024 #define MU_TOG 0x5025 // Music voice iterate #define MUV_IN 0x5024 #define MUV_DE 0x5025 #define MUV_IN 0x5026 #define MUV_DE 0x5027 // Midi mode on/off #define MI_ON 0x5026 #define MI_OFF 0x5027 #define MI_ON 0x5028 #define MI_OFF 0x5029 // GOTO layer - 16 layers max // when:
M quantum/quantum.c => quantum/quantum.c +61 -14
@@ 1,4 1,5 @@ #include "quantum.h" #include "timer.h" __attribute__ ((weak)) @@ void matrix_init_kb(void) {} 17,11 18,11 @@ void leader_start(void) {} __attribute__ ((weak)) void leader_end(void) {} uint8_t starting_note = 0x0C; int offset = 7; #ifdef AUDIO_ENABLE uint8_t starting_note = 0x0C; int offset = 7; bool music_activated = false; float music_scale[][2] = SONG(MUSIC_SCALE_SOUND); #endif @@ #ifdef MIDI_ENABLE 105,7 106,7 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef MIDI_ENABLE if (keycode == MI_ON && record->event.pressed) { midi_activated = true; PLAY_NOTE_ARRAY(music_scale, false, 0); play_music_scale(); return false; } @@ 181,7 182,6 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef AUDIO_ENABLE if (keycode == AU_ON && record->event.pressed) { audio_on(); audio_on_callback(); return false; } @@ 190,31 190,53 @@ bool process_record_quantum(keyrecord_t *record) { return false; } if (keycode == AU_TOG && record->event.pressed) { if (is_audio_on()) { audio_off(); } else { audio_on(); } return false; } if (keycode == MU_ON && record->event.pressed) { music_activated = true; PLAY_NOTE_ARRAY(music_scale, false, 0); music_on(); return false; } if (keycode == MU_OFF && record->event.pressed) { music_activated = false; stop_all_notes(); music_off(); return false; } if (keycode == MU_TOG && record->event.pressed) { if (music_activated) { music_off(); } else { music_on(); } return false; } if (keycode == MUV_IN && record->event.pressed) { voice_iterate(); PLAY_NOTE_ARRAY(music_scale, false, 0); play_music_scale(); return false; } if (keycode == MUV_DE && record->event.pressed) { voice_deiterate(); PLAY_NOTE_ARRAY(music_scale, false, 0); play_music_scale(); return false; } if (music_activated) { if (music_activated) { if (keycode == KC_LCTL && record->event.pressed) { // Start recording @@ stop_all_notes(); 258,7 280,7 @@ bool process_record_quantum(keyrecord_t *record) { } } else { stop_note(freq); } } if (keycode < 0xFF) // ignores all normal keycodes, but lets RAISE, LOWER, etc through @@ return false; 347,4 369,29 @@ void matrix_scan_quantum() { #endif matrix_scan_kb(); } \ No newline at end of file } bool is_music_on(void) { return (music_activated != 0); } void music_toggle(void) { if (!music_activated) { music_on(); } else { music_off(); } } void music_on(void) { music_activated = 1; music_on_user(); } void music_off(void) { music_activated = 0; stop_all_notes(); } __attribute__ ((weak)) void music_on_user() {} \ No newline at end of file
M quantum/quantum.h => quantum/quantum.h +7 -0
@@ 46,4 46,11 @@ void leader_end(void); #define LEADER_EXTERNS() extern bool leading; extern uint16_t leader_time; extern uint16_t leader_sequence[3]; extern uint8_t leader_sequence_size #define LEADER_DICTIONARY() if (leading && timer_elapsed(leader_time) > LEADER_TIMEOUT) bool is_music_on(void); void music_toggle(void); void music_on(void); void music_off(void); void music_on_user(void); #endif \ No newline at end of file