aboutsummaryrefslogtreecommitdiff
path: root/quantum/audio/voices.c
diff options
context:
space:
mode:
authorskullY <skullydazed@gmail.com>2019-08-30 11:19:03 -0700
committerskullydazed <skullydazed@users.noreply.github.com>2019-08-30 15:01:52 -0700
commitb624f32f944acdc59dcb130674c09090c5c404cb (patch)
treebc13adbba137d122d9a2c2fb2fafcbb08ac10e25 /quantum/audio/voices.c
parent61af76a10d00aba185b8338604171de490a13e3b (diff)
downloadqmk_firmware-b624f32f944acdc59dcb130674c09090c5c404cb.tar.gz
qmk_firmware-b624f32f944acdc59dcb130674c09090c5c404cb.zip
clang-format changes
Diffstat (limited to 'quantum/audio/voices.c')
-rw-r--r--quantum/audio/voices.c250
1 files changed, 117 insertions, 133 deletions
diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c
index 94147ccb6..53a65e4e3 100644
--- a/quantum/audio/voices.c
+++ b/quantum/audio/voices.c
@@ -19,40 +19,33 @@
19 19
20// these are imported from audio.c 20// these are imported from audio.c
21extern uint16_t envelope_index; 21extern uint16_t envelope_index;
22extern float note_timbre; 22extern float note_timbre;
23extern float polyphony_rate; 23extern float polyphony_rate;
24extern bool glissando; 24extern bool glissando;
25 25
26voice_type voice = default_voice; 26voice_type voice = default_voice;
27 27
28void set_voice(voice_type v) { 28void set_voice(voice_type v) { voice = v; }
29 voice = v;
30}
31 29
32void voice_iterate() { 30void voice_iterate() { voice = (voice + 1) % number_of_voices; }
33 voice = (voice + 1) % number_of_voices;
34}
35 31
36void voice_deiterate() { 32void voice_deiterate() { voice = (voice - 1 + number_of_voices) % number_of_voices; }
37 voice = (voice - 1 + number_of_voices) % number_of_voices;
38}
39 33
40float voice_envelope(float frequency) { 34float voice_envelope(float frequency) {
41 // envelope_index ranges from 0 to 0xFFFF, which is preserved at 880.0 Hz 35 // envelope_index ranges from 0 to 0xFFFF, which is preserved at 880.0 Hz
42 __attribute__ ((unused)) 36 __attribute__((unused)) uint16_t compensated_index = (uint16_t)((float)envelope_index * (880.0 / frequency));
43 uint16_t compensated_index = (uint16_t)((float)envelope_index * (880.0 / frequency));
44 37
45 switch (voice) { 38 switch (voice) {
46 case default_voice: 39 case default_voice:
47 glissando = false; 40 glissando = false;
48 note_timbre = TIMBRE_50; 41 note_timbre = TIMBRE_50;
49 polyphony_rate = 0; 42 polyphony_rate = 0;
50 break; 43 break;
51 44
52 #ifdef AUDIO_VOICES 45#ifdef AUDIO_VOICES
53 46
54 case something: 47 case something:
55 glissando = false; 48 glissando = false;
56 polyphony_rate = 0; 49 polyphony_rate = 0;
57 switch (compensated_index) { 50 switch (compensated_index) {
58 case 0 ... 9: 51 case 0 ... 9:
@@ -74,25 +67,23 @@ float voice_envelope(float frequency) {
74 break; 67 break;
75 68
76 case drums: 69 case drums:
77 glissando = false; 70 glissando = false;
78 polyphony_rate = 0; 71 polyphony_rate = 0;
79 // switch (compensated_index) { 72 // switch (compensated_index) {
80 // case 0 ... 10: 73 // case 0 ... 10:
81 // note_timbre = 0.5; 74 // note_timbre = 0.5;
82 // break; 75 // break;
83 // case 11 ... 20: 76 // case 11 ... 20:
84 // note_timbre = 0.5 * (21 - compensated_index) / 10; 77 // note_timbre = 0.5 * (21 - compensated_index) / 10;
85 // break; 78 // break;
86 // default: 79 // default:
87 // note_timbre = 0; 80 // note_timbre = 0;
88 // break; 81 // break;
89 // } 82 // }
90 // frequency = (rand() % (int)(frequency * 1.2 - frequency)) + (frequency * 0.8); 83 // frequency = (rand() % (int)(frequency * 1.2 - frequency)) + (frequency * 0.8);
91 84
92 if (frequency < 80.0) { 85 if (frequency < 80.0) {
93
94 } else if (frequency < 160.0) { 86 } else if (frequency < 160.0) {
95
96 // Bass drum: 60 - 100 Hz 87 // Bass drum: 60 - 100 Hz
97 frequency = (rand() % (int)(40)) + 60; 88 frequency = (rand() % (int)(40)) + 60;
98 switch (envelope_index) { 89 switch (envelope_index) {
@@ -108,8 +99,6 @@ float voice_envelope(float frequency) {
108 } 99 }
109 100
110 } else if (frequency < 320.0) { 101 } else if (frequency < 320.0) {
111
112
113 // Snare drum: 1 - 2 KHz 102 // Snare drum: 1 - 2 KHz
114 frequency = (rand() % (int)(1000)) + 1000; 103 frequency = (rand() % (int)(1000)) + 1000;
115 switch (envelope_index) { 104 switch (envelope_index) {
@@ -125,7 +114,6 @@ float voice_envelope(float frequency) {
125 } 114 }
126 115
127 } else if (frequency < 640.0) { 116 } else if (frequency < 640.0) {
128
129 // Closed Hi-hat: 3 - 5 KHz 117 // Closed Hi-hat: 3 - 5 KHz
130 frequency = (rand() % (int)(2000)) + 3000; 118 frequency = (rand() % (int)(2000)) + 3000;
131 switch (envelope_index) { 119 switch (envelope_index) {
@@ -141,7 +129,6 @@ float voice_envelope(float frequency) {
141 } 129 }
142 130
143 } else if (frequency < 1280.0) { 131 } else if (frequency < 1280.0) {
144
145 // Open Hi-hat: 3 - 5 KHz 132 // Open Hi-hat: 3 - 5 KHz
146 frequency = (rand() % (int)(2000)) + 3000; 133 frequency = (rand() % (int)(2000)) + 3000;
147 switch (envelope_index) { 134 switch (envelope_index) {
@@ -155,141 +142,138 @@ float voice_envelope(float frequency) {
155 note_timbre = 0; 142 note_timbre = 0;
156 break; 143 break;
157 } 144 }
158
159 } 145 }
160 break; 146 break;
161 case butts_fader: 147 case butts_fader:
162 glissando = true; 148 glissando = true;
163 polyphony_rate = 0; 149 polyphony_rate = 0;
164 switch (compensated_index) { 150 switch (compensated_index) {
165 case 0 ... 9: 151 case 0 ... 9:
166 frequency = frequency / 4; 152 frequency = frequency / 4;
167 note_timbre = TIMBRE_12; 153 note_timbre = TIMBRE_12;
168 break; 154 break;
169 155
170 case 10 ... 19: 156 case 10 ... 19:
171 frequency = frequency / 2; 157 frequency = frequency / 2;
172 note_timbre = TIMBRE_12; 158 note_timbre = TIMBRE_12;
173 break; 159 break;
174 160
175 case 20 ... 200: 161 case 20 ... 200:
176 note_timbre = .125 - pow(((float)compensated_index - 20) / (200 - 20), 2)*.125; 162 note_timbre = .125 - pow(((float)compensated_index - 20) / (200 - 20), 2) * .125;
177 break; 163 break;
178 164
179 default: 165 default:
180 note_timbre = 0; 166 note_timbre = 0;
181 break; 167 break;
182 } 168 }
183 break; 169 break;
184
185 // case octave_crunch:
186 // polyphony_rate = 0;
187 // switch (compensated_index) {
188 // case 0 ... 9:
189 // case 20 ... 24:
190 // case 30 ... 32:
191 // frequency = frequency / 2;
192 // note_timbre = TIMBRE_12;
193 // break;
194
195 // case 10 ... 19:
196 // case 25 ... 29:
197 // case 33 ... 35:
198 // frequency = frequency * 2;
199 // note_timbre = TIMBRE_12;
200 // break;
201 170
202 // default: 171 // case octave_crunch:
203 // note_timbre = TIMBRE_12; 172 // polyphony_rate = 0;
204 // break; 173 // switch (compensated_index) {
205 // } 174 // case 0 ... 9:
206 // break; 175 // case 20 ... 24:
176 // case 30 ... 32:
177 // frequency = frequency / 2;
178 // note_timbre = TIMBRE_12;
179 // break;
180
181 // case 10 ... 19:
182 // case 25 ... 29:
183 // case 33 ... 35:
184 // frequency = frequency * 2;
185 // note_timbre = TIMBRE_12;
186 // break;
187
188 // default:
189 // note_timbre = TIMBRE_12;
190 // break;
191 // }
192 // break;
207 193
208 case duty_osc: 194 case duty_osc:
209 // This slows the loop down a substantial amount, so higher notes may freeze 195 // This slows the loop down a substantial amount, so higher notes may freeze
210 glissando = true; 196 glissando = true;
211 polyphony_rate = 0; 197 polyphony_rate = 0;
212 switch (compensated_index) { 198 switch (compensated_index) {
213 default: 199 default:
214 #define OCS_SPEED 10 200# define OCS_SPEED 10
215 #define OCS_AMP .25 201# define OCS_AMP .25
216 // sine wave is slow 202 // sine wave is slow
217 // note_timbre = (sin((float)compensated_index/10000*OCS_SPEED) * OCS_AMP / 2) + .5; 203 // note_timbre = (sin((float)compensated_index/10000*OCS_SPEED) * OCS_AMP / 2) + .5;
218 // triangle wave is a bit faster 204 // triangle wave is a bit faster
219 note_timbre = (float)abs((compensated_index*OCS_SPEED % 3000) - 1500) * ( OCS_AMP / 1500 ) + (1 - OCS_AMP) / 2; 205 note_timbre = (float)abs((compensated_index * OCS_SPEED % 3000) - 1500) * (OCS_AMP / 1500) + (1 - OCS_AMP) / 2;
220 break; 206 break;
221 } 207 }
222 break; 208 break;
223 209
224 case duty_octave_down: 210 case duty_octave_down:
225 glissando = true; 211 glissando = true;
226 polyphony_rate = 0; 212 polyphony_rate = 0;
227 note_timbre = (envelope_index % 2) * .125 + .375 * 2; 213 note_timbre = (envelope_index % 2) * .125 + .375 * 2;
228 if ((envelope_index % 4) == 0) 214 if ((envelope_index % 4) == 0) note_timbre = 0.5;
229 note_timbre = 0.5; 215 if ((envelope_index % 8) == 0) note_timbre = 0;
230 if ((envelope_index % 8) == 0)
231 note_timbre = 0;
232 break; 216 break;
233 case delayed_vibrato: 217 case delayed_vibrato:
234 glissando = true; 218 glissando = true;
235 polyphony_rate = 0; 219 polyphony_rate = 0;
236 note_timbre = TIMBRE_50; 220 note_timbre = TIMBRE_50;
237 #define VOICE_VIBRATO_DELAY 150 221# define VOICE_VIBRATO_DELAY 150
238 #define VOICE_VIBRATO_SPEED 50 222# define VOICE_VIBRATO_SPEED 50
239 switch (compensated_index) { 223 switch (compensated_index) {
240 case 0 ... VOICE_VIBRATO_DELAY: 224 case 0 ... VOICE_VIBRATO_DELAY:
241 break; 225 break;
242 default: 226 default:
243 frequency = frequency * vibrato_lut[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; 227 frequency = frequency * vibrato_lut[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1)) / 1000 * VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)];
244 break; 228 break;
245 } 229 }
246 break; 230 break;
247 // case delayed_vibrato_octave: 231 // case delayed_vibrato_octave:
248 // polyphony_rate = 0; 232 // polyphony_rate = 0;
249 // if ((envelope_index % 2) == 1) { 233 // if ((envelope_index % 2) == 1) {
250 // note_timbre = 0.55; 234 // note_timbre = 0.55;
251 // } else { 235 // } else {
252 // note_timbre = 0.45; 236 // note_timbre = 0.45;
253 // } 237 // }
254 // #define VOICE_VIBRATO_DELAY 150 238 // #define VOICE_VIBRATO_DELAY 150
255 // #define VOICE_VIBRATO_SPEED 50 239 // #define VOICE_VIBRATO_SPEED 50
256 // switch (compensated_index) { 240 // switch (compensated_index) {
257 // case 0 ... VOICE_VIBRATO_DELAY: 241 // case 0 ... VOICE_VIBRATO_DELAY:
258 // break; 242 // break;
259 // default: 243 // default:
260 // frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)]; 244 // frequency = frequency * VIBRATO_LUT[(int)fmod((((float)compensated_index - (VOICE_VIBRATO_DELAY + 1))/1000*VOICE_VIBRATO_SPEED), VIBRATO_LUT_LENGTH)];
261 // break; 245 // break;
262 // } 246 // }
263 // break; 247 // break;
264 // case duty_fifth_down: 248 // case duty_fifth_down:
265 // note_timbre = 0.5; 249 // note_timbre = 0.5;
266 // if ((envelope_index % 3) == 0) 250 // if ((envelope_index % 3) == 0)
267 // note_timbre = 0.75; 251 // note_timbre = 0.75;
268 // break; 252 // break;
269 // case duty_fourth_down: 253 // case duty_fourth_down:
270 // note_timbre = 0.0; 254 // note_timbre = 0.0;
271 // if ((envelope_index % 12) == 0) 255 // if ((envelope_index % 12) == 0)
272 // note_timbre = 0.75; 256 // note_timbre = 0.75;
273 // if (((envelope_index % 12) % 4) != 1) 257 // if (((envelope_index % 12) % 4) != 1)
274 // note_timbre = 0.75; 258 // note_timbre = 0.75;
275 // break; 259 // break;
276 // case duty_third_down: 260 // case duty_third_down:
277 // note_timbre = 0.5; 261 // note_timbre = 0.5;
278 // if ((envelope_index % 5) == 0) 262 // if ((envelope_index % 5) == 0)
279 // note_timbre = 0.75; 263 // note_timbre = 0.75;
280 // break; 264 // break;
281 // case duty_fifth_third_down: 265 // case duty_fifth_third_down:
282 // note_timbre = 0.5; 266 // note_timbre = 0.5;
283 // if ((envelope_index % 5) == 0) 267 // if ((envelope_index % 5) == 0)
284 // note_timbre = 0.75; 268 // note_timbre = 0.75;
285 // if ((envelope_index % 3) == 0) 269 // if ((envelope_index % 3) == 0)
286 // note_timbre = 0.25; 270 // note_timbre = 0.25;
287 // break; 271 // break;
288 272
289 #endif 273#endif
290 274
291 default: 275 default:
292 break; 276 break;
293 } 277 }
294 278
295 return frequency; 279 return frequency;