From e475e43918fc200fea3951093223273ee2fb3761 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Thu, 1 Feb 2024 16:06:38 +0100 Subject: Adjust sync options to new tick sequencer --- src/drawing.c | 13 ++++++------ src/dsound.c | 3 +++ src/sequencer.c | 64 ++++++++++++++++++++++++++++++++++++++++----------------- src/settings.c | 15 ++++++++------ src/settings.h | 44 +++++++++++++++++++++++---------------- 5 files changed, 90 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/drawing.c b/src/drawing.c index a485ec4..3f646a6 100644 --- a/src/drawing.c +++ b/src/drawing.c @@ -422,6 +422,7 @@ draw_bpm() { settings.sync == SYNC_IN_LINK_48BPQ || settings.sync == SYNC_IN_LINK_24BPQ || settings.sync == SYNC_IN_LINK_12BPQ || + settings.sync == SYNC_IN_LINK_6BPQ || settings.sync == SYNC_IN_LINK_4BPQ) { txt_drawf("SYNC", x + 2, y + 2, COL_FG); } else { @@ -904,12 +905,12 @@ draw_prob(u8 prob, u8 clr) { void draw_panning(s8 pan, u8 clr) { switch (settings.sync) { - case SYNC_OUT_LINK_AUDIO_4: - case SYNC_OUT_LINK_AUDIO_8: - case SYNC_OUT_LINK_AUDIO_16: - case SYNC_OUT_AUDIO_4: - case SYNC_OUT_AUDIO_8: - case SYNC_OUT_AUDIO_16: { clr = COL_OFF; } break; + case SYNC_OUT_AUDIO_12BPQ: + case SYNC_OUT_AUDIO_6BPQ: + case SYNC_OUT_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_12BPQ: + case SYNC_OUT_LINK_AUDIO_6BPQ: + case SYNC_OUT_LINK_AUDIO_4BPQ: { clr = COL_OFF; } break; default: break; } size_t x = PARAMS_START_X + PARAMS_BOX_OFFSET_X * 4 + 3; diff --git a/src/dsound.c b/src/dsound.c index cba8c86..1751e47 100644 --- a/src/dsound.c +++ b/src/dsound.c @@ -45,6 +45,9 @@ init_dsound(void) { void sound_vsync() { + if (play_status == 0) { + return; + } if(audio_buf_active == 1) { dma_transfer_copy(SOUND_FIFO_A, audio_buffer, 1, 1, DMA_DST_FIXED diff --git a/src/sequencer.c b/src/sequencer.c index 7570a7a..a72eced 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -306,27 +306,14 @@ play_step(void) { SOUND_NOISE_CTRL = 0; } - switch (settings.sync) { - case SYNC_OUT_LINK_16: { gate_on(); } break; - case SYNC_OUT_LINK_8: { if (step_counter % 2 == 0) { gate_on(); } } break; - case SYNC_OUT_LINK_4: { if (step_counter % 4 == 0) { gate_on(); } } break; - case SYNC_OUT_AUDIO_16: { audio_sync_click = true; } break; - case SYNC_OUT_AUDIO_8: { if (step_counter % 2 == 0) { audio_sync_click = true; } } break; - case SYNC_OUT_AUDIO_4: { if (step_counter % 4 == 0) { audio_sync_click = true; } } break; - case SYNC_OUT_LINK_AUDIO_16: { gate_on(); audio_sync_click = true; } break; - case SYNC_OUT_LINK_AUDIO_8: { if (step_counter % 2 == 0) { gate_on(); audio_sync_click = true; } } break; - case SYNC_OUT_LINK_AUDIO_4: { if (step_counter % 4 == 0) { gate_on(); audio_sync_click = true; } } break; - default: break; - } - // Adjust per-channel panning. switch (settings.sync) { - case SYNC_OUT_LINK_AUDIO_4: - case SYNC_OUT_LINK_AUDIO_8: - case SYNC_OUT_LINK_AUDIO_16: - case SYNC_OUT_AUDIO_4: - case SYNC_OUT_AUDIO_8: - case SYNC_OUT_AUDIO_16: break; + case SYNC_OUT_AUDIO_12BPQ: + case SYNC_OUT_AUDIO_6BPQ: + case SYNC_OUT_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_12BPQ: + case SYNC_OUT_LINK_AUDIO_6BPQ: + case SYNC_OUT_LINK_AUDIO_4BPQ: break; default: { SOUND_DMG_MASTER = dmg_stereo_vol(3) | channel_vol(SOUND_SQUARE1, pan[0]) @@ -485,6 +472,21 @@ env_start: void sequencer_tick(void) { + switch (settings.sync) { + case SYNC_OUT_LINK_96BPQ: { gate_on(); } break; + case SYNC_OUT_LINK_48BPQ: { if (nseq_ticks % 2 == 0) { gate_on(); } } break; + case SYNC_OUT_LINK_24BPQ: { if (nseq_ticks % 4 == 0) { gate_on(); } } break; + case SYNC_OUT_LINK_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); } } break; + case SYNC_OUT_LINK_6BPQ: { if (nseq_ticks % 16 == 0) { gate_on(); } } break; + case SYNC_OUT_LINK_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); } } break; + case SYNC_OUT_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { audio_sync_click = true; } } break; + case SYNC_OUT_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; + case SYNC_OUT_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { audio_sync_click = true; } } break; + case SYNC_OUT_LINK_AUDIO_12BPQ: { if (nseq_ticks % 8 == 0) { gate_on(); audio_sync_click = true; } } break; + case SYNC_OUT_LINK_AUDIO_6BPQ: { if (nseq_ticks % 16 == 0) { audio_sync_click = true; } } break; + case SYNC_OUT_LINK_AUDIO_4BPQ: { if (nseq_ticks % 24 == 0) { gate_on(); audio_sync_click = true; } } break; + default: break; + } if (nseq_ticks++ == 0) { play_step(); } else if (nseq_ticks == 24) { @@ -499,6 +501,7 @@ set_time(int bpm) { settings.sync == SYNC_IN_LINK_48BPQ || settings.sync == SYNC_IN_LINK_24BPQ || settings.sync == SYNC_IN_LINK_12BPQ || + settings.sync == SYNC_IN_LINK_6BPQ || settings.sync == SYNC_IN_LINK_4BPQ) { return; } @@ -1886,6 +1889,29 @@ sync_in_12(void) { } } +void +sync_in_6(void) { + if (play_status) { + // 6bpq -> 96bpq. + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + sequencer_tick(); + } +} + void sync_in_4(void) { if (play_status) { diff --git a/src/settings.c b/src/settings.c index 3e8138e..48cc3e7 100644 --- a/src/settings.c +++ b/src/settings.c @@ -12,6 +12,7 @@ void sync_in_96(void); void sync_in_48(void); void sync_in_24(void); void sync_in_12(void); +void sync_in_6(void); void sync_in_4(void); void toggle_playing(void); void stop_playing(void); @@ -22,12 +23,14 @@ set_audio_settings(void) { settings.sync == SYNC_IN_LINK_48BPQ || settings.sync == SYNC_IN_LINK_24BPQ || settings.sync == SYNC_IN_LINK_12BPQ || + settings.sync == SYNC_IN_LINK_6BPQ || settings.sync == SYNC_IN_LINK_4BPQ) { switch (settings.sync) { case SYNC_IN_LINK_96BPQ: { irs_set(IRQ_SERIAL, sync_in_96); } break; case SYNC_IN_LINK_48BPQ: { irs_set(IRQ_SERIAL, sync_in_48); } break; case SYNC_IN_LINK_24BPQ: { irs_set(IRQ_SERIAL, sync_in_24); } break; case SYNC_IN_LINK_12BPQ: { irs_set(IRQ_SERIAL, sync_in_12); } break; + case SYNC_IN_LINK_6BPQ: { irs_set(IRQ_SERIAL, sync_in_6); } break; case SYNC_IN_LINK_4BPQ: { irs_set(IRQ_SERIAL, sync_in_4); } break; default: break; } @@ -42,12 +45,12 @@ set_audio_settings(void) { irs_set(IRQ_SERIAL, NULL); } switch (settings.sync) { - case SYNC_OUT_LINK_AUDIO_4: - case SYNC_OUT_LINK_AUDIO_8: - case SYNC_OUT_LINK_AUDIO_16: - case SYNC_OUT_AUDIO_4: - case SYNC_OUT_AUDIO_8: - case SYNC_OUT_AUDIO_16: { + case SYNC_OUT_AUDIO_12BPQ: + case SYNC_OUT_AUDIO_6BPQ: + case SYNC_OUT_AUDIO_4BPQ: + case SYNC_OUT_LINK_AUDIO_12BPQ: + case SYNC_OUT_LINK_AUDIO_6BPQ: + case SYNC_OUT_LINK_AUDIO_4BPQ: { SOUND_DMG_MASTER = sound_volume(SOUND_SQUARE1 | SOUND_SQUARE2 | SOUND_WAVE diff --git a/src/settings.h b/src/settings.h index fc8e8a0..916f1be 100644 --- a/src/settings.h +++ b/src/settings.h @@ -13,38 +13,46 @@ typedef enum SettingsList { typedef enum SyncSetting { SYNC_NONE = 0, - SYNC_OUT_LINK_16, - SYNC_OUT_LINK_8, - SYNC_OUT_LINK_4, - SYNC_OUT_AUDIO_16, - SYNC_OUT_AUDIO_8, - SYNC_OUT_AUDIO_4, - SYNC_OUT_LINK_AUDIO_16, - SYNC_OUT_LINK_AUDIO_8, - SYNC_OUT_LINK_AUDIO_4, + SYNC_OUT_LINK_96BPQ, + SYNC_OUT_LINK_48BPQ, + SYNC_OUT_LINK_24BPQ, + SYNC_OUT_LINK_12BPQ, + SYNC_OUT_LINK_6BPQ, + SYNC_OUT_LINK_4BPQ, + SYNC_OUT_AUDIO_12BPQ, + SYNC_OUT_AUDIO_6BPQ, + SYNC_OUT_AUDIO_4BPQ, + SYNC_OUT_LINK_AUDIO_12BPQ, + SYNC_OUT_LINK_AUDIO_6BPQ, + SYNC_OUT_LINK_AUDIO_4BPQ, SYNC_IN_LINK_96BPQ, SYNC_IN_LINK_48BPQ, SYNC_IN_LINK_24BPQ, SYNC_IN_LINK_12BPQ, + SYNC_IN_LINK_6BPQ, SYNC_IN_LINK_4BPQ, SYNC_NUM, } SyncSetting; char * sync_setting_str[] = { "NONE", - "LINK OUT (16)", - "LINK OUT (8)", - "LINK OUT (4)", - "AUDIO OUT (16)", - "AUDIO OUT (8)", - "AUDIO OUT (4)", - "LINK+AUDIO OUT (16)", - "LINK+AUDIO OUT (8)", - "LINK+AUDIO OUT (4)", + "LINK OUT (96BPQ)", + "LINK OUT (48BPQ)", + "LINK OUT (24BPQ)", + "LINK OUT (12BPQ)", + "LINK OUT (6BPQ)", + "LINK OUT (4BPQ)", + "AUDIO OUT (12BPQ)", + "AUDIO OUT (6BPQ)", + "AUDIO OUT (4BPQ)", + "LINK+AUDIO OUT (12BPQ)", + "LINK+AUDIO OUT (6BPQ)", + "LINK+AUDIO OUT (4BPQ)", "LINK IN (96BPQ)", "LINK IN (48BPQ)", "LINK IN (24BPQ)", "LINK IN (12BPQ)", + "LINK IN (6BPQ)", "LINK IN (4BPQ)", }; -- cgit v1.2.1