diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-10 17:24:34 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-10 17:24:34 +0200 |
commit | 9fdff1a5fcb0ca248fa4b60e3fac07242022d993 (patch) | |
tree | 03addb86ad338b7f4abec1d337ec90d181d10cd6 | |
parent | 49cc954802f819ee1aa93ab39f6f95b84c395915 (diff) | |
download | gba-experiments-9fdff1a5fcb0ca248fa4b60e3fac07242022d993.tar.gz gba-experiments-9fdff1a5fcb0ca248fa4b60e3fac07242022d993.zip |
Fix a bug where the waves were shared throughout trigs
-rw-r--r-- | src/sequencer.c | 113 |
1 files changed, 57 insertions, 56 deletions
diff --git a/src/sequencer.c b/src/sequencer.c index 9baab49..1f66f68 100644 --- a/src/sequencer.c +++ b/src/sequencer.c | |||
@@ -266,14 +266,14 @@ u32 sprite_channels_selector[] = { | |||
266 | 0x00000000, 0x00000000, 0x0008080e, 0x00000000, | 266 | 0x00000000, 0x00000000, 0x0008080e, 0x00000000, |
267 | }; | 267 | }; |
268 | 268 | ||
269 | static u8 sine_wave[] = { | 269 | u8 sine_wave[] = { |
270 | 0x89, 0xBC, 0xDE, 0xEF, | 270 | 0x89, 0xBC, 0xDE, 0xEF, |
271 | 0xFE, 0xED, 0xCB, 0x98, | 271 | 0xFE, 0xED, 0xCB, 0x98, |
272 | 0x76, 0x43, 0x21, 0x10, | 272 | 0x76, 0x43, 0x21, 0x10, |
273 | 0x01, 0x12, 0x34, 0x67, | 273 | 0x01, 0x12, 0x34, 0x67, |
274 | }; | 274 | }; |
275 | 275 | ||
276 | static u8 saw_wave[16] = { | 276 | u8 saw_wave[16] = { |
277 | 0x01, 0x23, 0x45, 0x67, | 277 | 0x01, 0x23, 0x45, 0x67, |
278 | 0x89, 0xab, 0xcd, 0xef, | 278 | 0x89, 0xab, 0xcd, 0xef, |
279 | 0x01, 0x23, 0x45, 0x67, | 279 | 0x01, 0x23, 0x45, 0x67, |
@@ -294,68 +294,67 @@ typedef struct SeqTrigger { | |||
294 | u8 sweep_direction; | 294 | u8 sweep_direction; |
295 | u8 wave_volume; | 295 | u8 wave_volume; |
296 | u8 wave_mode; | 296 | u8 wave_mode; |
297 | u8 *wave_a; | 297 | u8 wave_a[16]; |
298 | u8 *wave_b; | 298 | u8 wave_b[16]; |
299 | // TODO: Do we need other fields? | ||
300 | } SeqTrigger; | 299 | } SeqTrigger; |
301 | 300 | ||
302 | static SeqTrigger sequences[3][16] = { | 301 | static SeqTrigger sequences[3][16] = { |
303 | // Synth 1 | 302 | // Synth 1. |
304 | { | 303 | { |
305 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 304 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
306 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 305 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
307 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 306 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
308 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 307 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
309 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 308 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
310 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 309 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
311 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 310 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
312 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 311 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
313 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 312 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
314 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 313 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
315 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 314 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
316 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 315 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
317 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 316 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
318 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 317 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
319 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 318 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
320 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 319 | {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
321 | }, | 320 | }, |
322 | // Synth 2 | 321 | // Synth 2. |
323 | { | 322 | { |
324 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 323 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
325 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 324 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
326 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 325 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
327 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 326 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
328 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 327 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
329 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 328 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
330 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 329 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
331 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 330 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
332 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 331 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
333 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 332 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
334 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 333 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
335 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 334 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
336 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 335 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
337 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 336 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
338 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 337 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
339 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, | 338 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, |
340 | }, | 339 | }, |
341 | // Synth 3 | 340 | // Synth 3. |
342 | { | 341 | { |
343 | {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &saw_wave}, | 342 | {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
344 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &saw_wave}, | 343 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
345 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 344 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
346 | {false, NOTE_C_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &sine_wave}, | 345 | {false, NOTE_C_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
347 | {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 346 | {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
348 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &saw_wave}, | 347 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
349 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &saw_wave}, | 348 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
350 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 349 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
351 | {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &sine_wave}, | 350 | {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
352 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 351 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
353 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &saw_wave}, | 352 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
354 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &saw_wave}, | 353 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
355 | {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 354 | {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
356 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &sine_wave}, | 355 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
357 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 356 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
358 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, | 357 | {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, |
359 | }, | 358 | }, |
360 | }; | 359 | }; |
361 | 360 | ||
@@ -373,6 +372,8 @@ static SeqTrigger sequences[3][16] = { | |||
373 | // TODO: Research a way of having pattern chains. | 372 | // TODO: Research a way of having pattern chains. |
374 | // TODO: Enable control on channels 3-4. | 373 | // TODO: Enable control on channels 3-4. |
375 | // TODO: Study how to save patterns and chains. | 374 | // TODO: Study how to save patterns and chains. |
375 | // TODO: Wave channel should have a default (sine, saw, square) and/or maybe | ||
376 | // some buttons for set those values. | ||
376 | 377 | ||
377 | static int bpm = 115; | 378 | static int bpm = 115; |
378 | static int step_counter = 0; | 379 | static int step_counter = 0; |