diff options
author | Drashna Jaelre <drashna@live.com> | 2018-04-19 07:47:04 +0200 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2018-04-19 07:47:04 +0200 |
commit | 8b0b17a369be6d3dff4cb9bad4253960252a5e95 (patch) | |
tree | 11d453ef480983571de84147db3bc9c1bfcb5054 /quantum | |
parent | 23b45710acc57ed147e006a8c79a1caf6fa57fd7 (diff) | |
download | qmk_firmware-8b0b17a369be6d3dff4cb9bad4253960252a5e95.tar.gz qmk_firmware-8b0b17a369be6d3dff4cb9bad4253960252a5e95.tar.xz |
Add Faux Clicking as subset of Audio feature (#2748)
* Add Faux Clicky to main Audio feature
* Make clicky settings user configurable
* Add additional documentation
* Don't play when music mode is enabled (hopefully)
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/process_keycode/process_audio.c | 69 | ||||
-rw-r--r-- | quantum/quantum_keycodes.h | 11 |
2 files changed, 79 insertions, 1 deletions
diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c index 32057ae8d..2d92e4064 100644 --- a/quantum/process_keycode/process_audio.c +++ b/quantum/process_keycode/process_audio.c @@ -10,6 +10,46 @@ float voice_change_song[][2] = VOICE_CHANGE_SONG; #define PITCH_STANDARD_A 440.0f #endif +#ifdef AUDIO_CLICKY +#ifdef AUDIO_CLICKY_ON +bool clicky_enable = true; +#else +bool clicky_enable = false; +#endif +#ifndef AUDIO_CLICKY_FREQ_DEFAULT +#define AUDIO_CLICKY_FREQ_DEFAULT 440.0f +#endif +#ifndef AUDIO_CLICKY_FREQ_MIN +#define AUDIO_CLICKY_FREQ_MIN 65.0f +#endif +#ifndef AUDIO_CLICKY_FREQ_MAX +#define AUDIO_CLICKY_FREQ_MAX 1500.0f +#endif +#ifndef AUDIO_CLICKY_FREQ_FACTOR +#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f +#endif +#ifndef AUDIO_CLICKY_FREQ_RANDOMNESS +#define AUDIO_CLICKY_FREQ_RANDOMNESS 0.05f +#endif + +float clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; +float clicky_song[][2] = {{AUDIO_CLICKY_FREQ_DEFAULT, 3}, {AUDIO_CLICKY_FREQ_DEFAULT, 1}}; // 3 and 1 --> durations + +#ifndef NO_MUSIC_MODE +extern bool music_activated; +extern bool midi_activated; +#endif + +void clicky_play(void) { +#ifndef NO_MUSIC_MODE + if (music_activated || midi_activated) return; +#endif + clicky_song[0][0] = 2.0f * clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + clicky_song[1][0] = clicky_freq * (1.0f + AUDIO_CLICKY_FREQ_RANDOMNESS * ( ((float)rand()) / ((float)(RAND_MAX)) ) ); + PLAY_SONG(clicky_song); +} +#endif + static float compute_freq_for_midi_note(uint8_t note) { // https://en.wikipedia.org/wiki/MIDI_tuning_standard @@ -49,6 +89,33 @@ bool process_audio(uint16_t keycode, keyrecord_t *record) { return false; } +#ifdef AUDIO_CLICKY + if (keycode == CLICKY_TOGGLE && record->event.pressed) { clicky_enable = !clicky_enable; } + + if (keycode == CLICKY_RESET && record->event.pressed) { clicky_freq = AUDIO_CLICKY_FREQ_DEFAULT; } + + if (keycode == CLICKY_UP && record->event.pressed) { + float new_freq = clicky_freq * AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq < AUDIO_CLICKY_FREQ_MAX) { + clicky_freq = new_freq; + } + } + if (keycode == CLICKY_TOGGLE && record->event.pressed) { + float new_freq = clicky_freq / AUDIO_CLICKY_FREQ_FACTOR; + if (new_freq > AUDIO_CLICKY_FREQ_MIN) { + clicky_freq = new_freq; + } + } + + + if ( (clicky_enable && keycode != CLICKY_TOGGLE) || (!clicky_enable && keycode == CLICKY_TOGGLE) ) { + if (record->event.pressed) { + stop_all_notes(); + clicky_play();; + } + } +#endif // AUDIO_CLICKY + return true; } @@ -65,4 +132,4 @@ void process_audio_all_notes_off(void) { } __attribute__ ((weak)) -void audio_on_user() {}
\ No newline at end of file +void audio_on_user() {} diff --git a/quantum/quantum_keycodes.h b/quantum/quantum_keycodes.h index d545440c9..d6030284a 100644 --- a/quantum/quantum_keycodes.h +++ b/quantum/quantum_keycodes.h @@ -140,6 +140,12 @@ enum quantum_keycodes { AU_OFF, AU_TOG, + // Faux clicky as part of main audio feature + CLICKY_TOGGLE, + CLICKY_UP, + CLICKY_DOWN, + CLICKY_RESET, + #ifdef FAUXCLICKY_ENABLE // Faux clicky FC_ON, @@ -561,6 +567,11 @@ enum quantum_keycodes { #define KC_GESC GRAVE_ESC +#define CK_TOGG CLICKY_TOGGLE +#define CK_RST CLICKY_RESET +#define CK_UP CLICKY_UP +#define CK_DOWN CLICKY_DOWN + #define RGB_MOD RGB_MODE_FORWARD #define RGB_SMOD RGB_MODE_FORWARD #define RGB_RMOD RGB_MODE_REVERSE |