diff options
author | coderkun <olli@coderkun.de> | 2017-04-01 10:56:29 +0200 |
---|---|---|
committer | coderkun <olli@coderkun.de> | 2017-04-01 10:56:29 +0200 |
commit | 605c4129cc89e8fe647881108b0c9c79d4da1aea (patch) | |
tree | 9af55a60d567bd66b5c8572c04ab63b62abb5a02 /quantum/process_keycode/process_audio.c | |
parent | b0ade6dc9838d4112cbc3093ac3033aa81ef172d (diff) | |
parent | 3448d5d4874a2775f85320a2be69edd241575d46 (diff) | |
download | firmware-605c4129cc89e8fe647881108b0c9c79d4da1aea.tar.gz firmware-605c4129cc89e8fe647881108b0c9c79d4da1aea.tar.bz2 firmware-605c4129cc89e8fe647881108b0c9c79d4da1aea.zip |
Merge branch 'master' into coderkun_neo2
Diffstat (limited to 'quantum/process_keycode/process_audio.c')
-rw-r--r-- | quantum/process_keycode/process_audio.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/quantum/process_keycode/process_audio.c b/quantum/process_keycode/process_audio.c new file mode 100644 index 000000000..0b6380ed3 --- /dev/null +++ b/quantum/process_keycode/process_audio.c @@ -0,0 +1,62 @@ +#include "audio.h" +#include "process_audio.h" + +static float compute_freq_for_midi_note(uint8_t note) +{ + // https://en.wikipedia.org/wiki/MIDI_tuning_standard + return pow(2.0, (note - 69) / 12.0) * 440.0f; +} + +bool process_audio(uint16_t keycode, keyrecord_t *record) { + + if (keycode == AU_ON && record->event.pressed) { + audio_on(); + return false; + } + + if (keycode == AU_OFF && record->event.pressed) { + audio_off(); + return false; + } + + if (keycode == AU_TOG && record->event.pressed) { + if (is_audio_on()) + { + audio_off(); + } + else + { + audio_on(); + } + return false; + } + + if (keycode == MUV_IN && record->event.pressed) { + voice_iterate(); + music_scale_user(); + return false; + } + + if (keycode == MUV_DE && record->event.pressed) { + voice_deiterate(); + music_scale_user(); + return false; + } + + return true; +} + +void process_audio_noteon(uint8_t note) { + play_note(compute_freq_for_midi_note(note), 0xF); +} + +void process_audio_noteoff(uint8_t note) { + stop_note(compute_freq_for_midi_note(note)); +} + +void process_audio_all_notes_off(void) { + stop_all_notes(); +} + +__attribute__ ((weak)) +void audio_on_user() {}
\ No newline at end of file |