parent
2e60054951
commit
73228f5e5d
@ -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; |
||||
} |
@ -0,0 +1,21 @@ |
||||
#include <stdint.h> |
||||
#include <stdbool.h> |
||||
#include <avr/io.h> |
||||
#include <util/delay.h> |
||||
#include "musical_notes.h" |
||||
#include "song_list.h" |
||||
|
||||
#ifndef VOICES_H |
||||
#define VOICES_H |
||||
|
||||
float voice_envelope(float frequency); |
||||
|
||||
typedef enum { |
||||
default_voice, |
||||
butts_fader, |
||||
octave_crunch |
||||
} voice_type; |
||||
|
||||
void set_voice(voice_type v); |
||||
|
||||
#endif |
Loading…
Reference in new issue