diff --git a/lib/audio.c b/lib/audio.c index 53b8cd0..c796330 100644 --- a/lib/audio.c +++ b/lib/audio.c @@ -461,7 +461,7 @@ void audio_sample_tick() { shift = 2; } ch3_val = -1; - if(ctx.ch3_enable) { + if(ctx.ch3_enable && (ctx.ch3_left || ctx.ch3_right)) { ch3_val = (((float)(ctx.ch3_last_sample >> shift) - 7.5f)/7.5f); if(ctx.ch3_left) { left += ch3_val; @@ -505,28 +505,6 @@ void audio_sample_tick() { u8 right_vol = ctx.volume_right == 0 ? 1 : ctx.volume_right; left *= (float)left_vol/7.0f; right *= (float)right_vol/7.0f; - - if(period_tick % 100 == 0){ - ctx.sq1_history[ctx.sq1_index++] = sq1_val; - if (ctx.sq1_index == 384) { - ctx.sq1_index = 0; - } - - ctx.sq2_history[ctx.sq2_index++] = sq2_val; - if (ctx.sq2_index == 384) { - ctx.sq2_index = 0; - } - - ctx.ch3_history[ctx.ch3_index++] = ch3_val; - if (ctx.ch3_index == 384) { - ctx.ch3_index = 0; - } - - ctx.ch4_history[ctx.ch4_index++] = ch4_val; - if (ctx.ch4_index == 384) { - ctx.ch4_index = 0; - } - } smooth_left = smooth_left - (LPF_Beta * (smooth_left - left)); smooth_right = smooth_right - (LPF_Beta * (smooth_right - right)); cycles_needed += SAMPLES_PER_AUDIO_TICK; @@ -541,6 +519,7 @@ void audio_sample_tick() { //return; //} cycles_needed -= 1; + bool dacs = ctx.ch1_dac || ctx.ch2_dac || ctx.ch3_dac || ctx.ch4_dac; float left_out = 0; @@ -575,6 +554,39 @@ void audio_sample_tick() { //ctx.ch4_audio_buffer[(ctx.sq1_write_index)] = (ctx.ch4_lfsr & 0b1) ? (float)(ctx.ch4_volume-7.5f)/7.5f : -1.0f; ctx.sq1_write_index = (ctx.sq1_write_index + 1); //ctx.buffer_cnt++; + history_timer++; + if(history_timer >= history_interval){ + history_timer = 0; + ctx.sq1_history[ctx.sq1_index++] = sq1_val; + if (ctx.sq1_index == 384) { + ctx.sq1_index = 0; + } + + ctx.sq2_history[ctx.sq2_index++] = sq2_val; + if (ctx.sq2_index == 384) { + ctx.sq2_index = 0; + } + + ctx.ch3_history[ctx.ch3_index++] = ch3_val; + if (ctx.ch3_index == 384) { + ctx.ch3_index = 0; + } + + ctx.ch4_history[ctx.ch4_index++] = ch4_val; + if (ctx.ch4_index == 384) { + ctx.ch4_index = 0; + } + ctx.left_history[ctx.left_index++] = left_out; + if (ctx.left_index == 384) { + ctx.left_index = 0; + } + + ctx.right_history[ctx.right_index++] = right_out; + if (ctx.right_index == 384) { + ctx.right_index = 0; + } + } + if(ctx.sq1_write_index == FRAMES_PER_BUFFER) { ctx.sq1_write_index = 0; float *data[2];