From 56f50f4ebe1ab479e15361a25e9c14724bee07bc Mon Sep 17 00:00:00 2001 From: Jasmine Iwanek Date: Fri, 12 Jul 2024 00:46:30 -0400 Subject: [PATCH] Fix the envelope generator Co-Authored-By: nukeykt --- src/sound/snd_opl_nuked.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/sound/snd_opl_nuked.c b/src/sound/snd_opl_nuked.c index 5449ebbd2..2bc6c2a67 100644 --- a/src/sound/snd_opl_nuked.c +++ b/src/sound/snd_opl_nuked.c @@ -170,6 +170,7 @@ typedef struct chip { uint8_t eg_timerrem; uint8_t eg_state; uint8_t eg_add; + uint64_t eg_timer_lo; uint8_t newm; uint8_t nts; uint8_t rhy; @@ -622,7 +623,7 @@ env_calc(slot_t *slot) break; } } else { - shift = (rate_hi & 0x03) + eg_incstep[rate_lo][slot->dev->timer & 0x03u]; + shift = (rate_hi & 0x03) + eg_incstep[rate_lo][slot->dev->eg_timer_lo]; if (shift & 0x04) shift = 0x03; if (!shift) @@ -1438,16 +1439,16 @@ nuked_generate_4ch(void *priv, int32_t *buf4) dev->vibpos = (dev->vibpos + 1) & 7; dev->timer++; - dev->eg_add = 0; - if (dev->eg_timer) { - while (shift < 36 && ((dev->eg_timer >> shift) & 1) == 0) + if (dev->eg_state) { + while (shift < 13 && ((dev->eg_timer >> shift) & 1) == 0) shift++; if (shift > 12) dev->eg_add = 0; else dev->eg_add = shift + 1; + dev->eg_timer_lo = (uint8_t) (dev->eg_timer & 0x3u); } if (dev->eg_timerrem || dev->eg_state) {