From 0a9566d5adb29aaa122b05382030be95f3f6fa5d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 25 Jan 2024 13:22:55 -0500 Subject: [PATCH] PowerNoise: fix low periods sadly will increase CPU usage on higher notes but at least it is fixed --- extern/pwrnoise/pwrnoise.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extern/pwrnoise/pwrnoise.c b/extern/pwrnoise/pwrnoise.c index 436b76f35..93a47a701 100644 --- a/extern/pwrnoise/pwrnoise.c +++ b/extern/pwrnoise/pwrnoise.c @@ -51,11 +51,11 @@ void pwrnoise_noise_step(noise_channel_t *chan, uint16_t cycles) { chan->period_counter += (cycles >> (chan->octave + 1)); if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter; - if (chan->period_counter >= 4096) { + while (chan->period_counter >= 4096) { chan->prev = (uint8_t)(chan->lfsr >> 15); uint16_t in = ((chan->lfsr >> chan->tapa) ^ (chan->tapb_enable ? (chan->lfsr >> chan->tapb) : 0)) & 0x0001; chan->lfsr = (chan->lfsr << 1) | in; - chan->period_counter = chan->period + (chan->period_counter - 4096); + chan->period_counter -= 4096 - chan->period; } } @@ -111,7 +111,7 @@ void pwrnoise_slope_step(slope_channel_t *chan, uint16_t cycles, bool force_zero chan->period_counter += (cycles >> (chan->octave + 1)); if ((cycles >> (chan->octave + 1)) == 0) ++chan->period_counter; - if (chan->period_counter >= 4096) { + while (chan->period_counter >= 4096) { if (!chan->portion) { if ((chan->flags & 0x02) != 0) chan->accum -= chan->aoffset; else chan->accum += chan->aoffset; @@ -139,7 +139,7 @@ void pwrnoise_slope_step(slope_channel_t *chan, uint16_t cycles, bool force_zero } } - chan->period_counter = chan->period + (chan->period_counter - 4096); + chan->period_counter -= 4096 - chan->period; uint8_t left = chan->accum >> 3; uint8_t right = chan->accum >> 3;