summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-05-10 17:24:34 +0200
committerBad Diode <bd@badd10de.dev>2021-05-10 17:24:34 +0200
commit9fdff1a5fcb0ca248fa4b60e3fac07242022d993 (patch)
tree03addb86ad338b7f4abec1d337ec90d181d10cd6
parent49cc954802f819ee1aa93ab39f6f95b84c395915 (diff)
downloadgba-experiments-9fdff1a5fcb0ca248fa4b60e3fac07242022d993.tar.gz
gba-experiments-9fdff1a5fcb0ca248fa4b60e3fac07242022d993.zip
Fix a bug where the waves were shared throughout trigs
-rw-r--r--src/sequencer.c113
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
269static u8 sine_wave[] = { 269u8 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
276static u8 saw_wave[16] = { 276u8 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
302static SeqTrigger sequences[3][16] = { 301static 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
377static int bpm = 115; 378static int bpm = 115;
378static int step_counter = 0; 379static int step_counter = 0;