PowerNoise: fix low periods
sadly will increase CPU usage on higher notes but at least it is fixed
This commit is contained in:
parent
bf3353ebb8
commit
0a9566d5ad
8
extern/pwrnoise/pwrnoise.c
vendored
8
extern/pwrnoise/pwrnoise.c
vendored
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue