diff options
author | Jack Humbert <jack.humb@gmail.com> | 2016-04-21 00:37:45 -0400 |
---|---|---|
committer | Jack Humbert <jack.humb@gmail.com> | 2016-04-21 00:37:45 -0400 |
commit | 73228f5e5d1d4cd31a46e5e93aa893a8f727e3b9 (patch) | |
tree | a2c07de2c28427d8114ebcdaa2df36cea4d1800b /quantum/audio/voices.c | |
parent | 2e60054951ce08e973c735991bd95390c6aa3842 (diff) |
restructures audio, begins voicing
Diffstat (limited to 'quantum/audio/voices.c')
-rw-r--r-- | quantum/audio/voices.c | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c new file mode 100644 index 0000000000..30e8be641e --- /dev/null +++ b/quantum/audio/voices.c @@ -0,0 +1,60 @@ +#include "voices.h" + +extern uint16_t envelope_index; +extern float note_timbre; + +voice_type voice = default_voice; + +void set_voice(voice_type v) { + voice = v; +} + +float voice_envelope(float frequency) { + // envelope_index ranges from 0 to 0xFFFF, which is preserved at 880.0 Hz + uint16_t compensated_index = (uint16_t)((float)envelope_index * (880.0 / frequency)); + + switch (voice) { + case default_voice: + // nothing here on purpose + break; + case butts_fader: + switch (compensated_index) { + case 0 ... 9: + frequency = frequency / 4; + note_timbre = TIMBRE_12; + break; + case 10 ... 19: + frequency = frequency / 2; + note_timbre = TIMBRE_12; + break; + case 20 ... 200: + note_timbre = .125 - pow(((float)compensated_index - 20) / (200 - 20), 2)*.125; + break; + default: + note_timbre = 0; + break; + } + break; + case octave_crunch: + switch (compensated_index) { + case 0 ... 9: + case 20 ... 24: + case 30 ... 32: + frequency = frequency / 2; + note_timbre = TIMBRE_12; + break; + case 10 ... 19: + case 25 ... 29: + case 33 ... 35: + frequency = frequency * 2; + note_timbre = TIMBRE_12; + break; + default: + note_timbre = TIMBRE_12; + break; + } + break; + } + + return frequency; +}
\ No newline at end of file |