diff options
author | Drashna Jaelre <drashna@live.com> | 2018-04-21 09:30:10 -0700 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2018-04-21 12:30:10 -0400 |
commit | 33fdd1d2551591a5c295c6dc68ccf52c4698b9c1 (patch) | |
tree | 8d8134cecf3121fad4e81c2f16d1804ae233edb2 /quantum/process_keycode/process_clicky.c | |
parent | d1c3419d2ade6341bb7eba130bf8c77005705519 (diff) | |
download | qmk_firmware-33fdd1d2551591a5c295c6dc68ccf52c4698b9c1.tar.gz |
Fix Audio Clicky sub-feature (#2784)
* Fix Audio Clicky feature
* Add to features
Diffstat (limited to 'quantum/process_keycode/process_clicky.c')
-rw-r--r-- | quantum/process_keycode/process_clicky.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/quantum/process_keycode/process_clicky.c b/quantum/process_keycode/process_clicky.c new file mode 100644 index 000000000..2b9d8a0f7 --- /dev/null +++ b/quantum/process_keycode/process_clicky.c @@ -0,0 +1,72 @@ +#include "audio.h" +#include "process_clicky.h" + +#ifdef AUDIO_CLICKY + +#ifdef AUDIO_CLICKY_ON +bool clicky_enable = true; +#else // AUDIO_CLICKY_ON +bool clicky_enable = false; +#endif // AUDIO_CLICKY_ON +#ifndef AUDIO_CLICKY_FREQ_DEFAULT +#define AUDIO_CLICKY_FREQ_DEFAULT 440.0f +#endif // !AUDIO_CLICKY_FREQ_DEFAULT +#ifndef AUDIO_CLICKY_FREQ_MIN +#define AUDIO_CLICKY_FREQ_MIN 65.0f +#endif // !AUDIO_CLICKY_FREQ_MIN +#ifndef AUDIO_CLICKY_FREQ_MAX +#define AUDIO_CLICKY_FREQ_MAX 1500.0f +#endif // !AUDIO_CLICKY_FREQ_MAX +#ifndef AUDIO_CLICKY_FREQ_FACTOR +#define AUDIO_CLICKY_FREQ_FACTOR 1.18921f +#endif // !AUDIO_CLICKY_FREQ_FACTOR +#ifndef AUDIO_CLICKY_FREQ_RANDOMNESS +#define AUDIO_CLICKY_FREQ_RANDOMNESS 0.05f +#endif // !AUDIO_CLICKY_FREQ_RANDOMNESS + +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 // !NO_MUSIC_MODE + +void clicky_play(void) { +#ifndef NO_MUSIC_MODE + if (music_activated || midi_activated) return; +#endif // !NO_MUSIC_MODE + 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); +} + +bool process_clicky(uint16_t keycode, keyrecord_t *record) { + 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 ) { + if (record->event.pressed) { + stop_all_notes(); + clicky_play();; + } + } + return true; +} + +#endif //AUDIO_CLICKY |