From 9fdff1a5fcb0ca248fa4b60e3fac07242022d993 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 10 May 2021 17:24:34 +0200 Subject: Fix a bug where the waves were shared throughout trigs --- src/sequencer.c | 113 ++++++++++++++++++++++++++++---------------------------- 1 file 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[] = { 0x00000000, 0x00000000, 0x0008080e, 0x00000000, }; -static u8 sine_wave[] = { +u8 sine_wave[] = { 0x89, 0xBC, 0xDE, 0xEF, 0xFE, 0xED, 0xCB, 0x98, 0x76, 0x43, 0x21, 0x10, 0x01, 0x12, 0x34, 0x67, }; -static u8 saw_wave[16] = { +u8 saw_wave[16] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 0x01, 0x23, 0x45, 0x67, @@ -294,68 +294,67 @@ typedef struct SeqTrigger { u8 sweep_direction; u8 wave_volume; u8 wave_mode; - u8 *wave_a; - u8 *wave_b; - // TODO: Do we need other fields? + u8 wave_a[16]; + u8 wave_b[16]; } SeqTrigger; static SeqTrigger sequences[3][16] = { - // Synth 1 + // Synth 1. { - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_C_4, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, }, - // Synth 2 + // Synth 2. { - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 0, 0, {0}, {0}}, }, - // Synth 3 + // Synth 3. { - {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &saw_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &saw_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, - {false, NOTE_C_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &sine_wave}, - {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &saw_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &saw_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, - {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &sine_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &saw_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &saw_wave}, - {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &saw_wave, &sine_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, - {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, &sine_wave, &sine_wave}, + {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_C_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {true, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {true, NOTE_D_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, + {false, NOTE_G_5, 8, 4, 0, 2, 0, 0, 0, 3, 0, {0}, {0}}, }, }; @@ -373,6 +372,8 @@ static SeqTrigger sequences[3][16] = { // TODO: Research a way of having pattern chains. // TODO: Enable control on channels 3-4. // TODO: Study how to save patterns and chains. +// TODO: Wave channel should have a default (sine, saw, square) and/or maybe +// some buttons for set those values. static int bpm = 115; static int step_counter = 0; -- cgit v1.2.1