From 8b0b17a369be6d3dff4cb9bad4253960252a5e95 Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Wed, 18 Apr 2018 22:47:04 -0700 Subject: 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) --- quantum/process_keycode/process_audio.c | 69 ++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) (limited to 'quantum/process_keycode/process_audio.c') 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() {} -- cgit v1.2.3-24-g4f1b