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
	
	 Jack Humbert
						Jack Humbert