From b83804d58aa7d5a04c9b336c523b1337bc2411d3 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 4 Jan 2024 16:40:17 +0100 Subject: Add basic MIDI 24bpq sync in --- src/sequencer.c | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/sequencer.c b/src/sequencer.c index 9dcaa89..b5cfd46 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -346,16 +346,16 @@ play_step(void) { step_counter = (step_counter + 1) % 16; } +static int nseq_ticks = 0; + void sequencer_tick(void) { - static int nseq_ticks = 0; - if (nseq_ticks++ < 24) { + if (nseq_ticks++ == 0) { + play_step(); return; + } else if (nseq_ticks == 24) { + nseq_ticks = 0; } - nseq_ticks = 0; - - // NOTE: ACK interrupt before play_step??? - play_step(); } void @@ -523,6 +523,7 @@ stop_sound(void) { void stop_playing(void) { step_counter = 0; + nseq_ticks = 0; chain.current = 15; chain.current = find_next_pattern(); chain.playing = false; @@ -534,6 +535,7 @@ void toggle_playing(void) { play_status ^= 1; step_counter = 0; + nseq_ticks = 0; chain.current = 15; chain.current = find_next_pattern(); chain.playing = false; @@ -1559,14 +1561,14 @@ reset_serial_in(void) { void serial_irq(void) { if (play_status) { - if (in_ticks++ == 0) { - // TODO: Instead of play_step use the nseq_ticks instead! - play_step(); - // MIDI: 24 / 8 = 3 - // set to 6 for half tempo - } else if (in_ticks == 3) { - in_ticks = 0; - } + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); } } -- cgit v1.2.1