From 9a45bf94aa5f10a6e8a4c27cebb776496ede1e08 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Wed, 20 Dec 2023 02:18:19 -0800 Subject: [PATCH] GB Audio: Fix restarting envelope when writing to register (fixes #3067) --- CHANGES | 1 + src/gb/audio.c | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 48900d31d..8aafdbee5 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ Emulation fixes: - ARM: Fake bpkt instruction should take no cycles (fixes mgba.io/i/2551) - GB Audio: Fix channels 1/2 staying muted if restarted after long silence - GB Audio: Fix channel 1 restarting if sweep applies after stop (fixes mgba.io/i/2965) + - GB Audio: Fix restarting envelope when writing to register (fixes mgba.io/i/3067) - GB I/O: Read back proper SVBK value after writing 0 (fixes mgba.io/i/2921) - GB SIO: Disabling SIO should cancel pending transfers (fixes mgba.io/i/2537) - GBA Audio: Fix sample timing drifting when changing sample interval diff --git a/src/gb/audio.c b/src/gb/audio.c index 569b98b84..7fbd0d532 100644 --- a/src/gb/audio.c +++ b/src/gb/audio.c @@ -850,9 +850,6 @@ static void _sample(struct mTiming* timing, void* user, uint32_t cyclesLate) { bool _resetEnvelope(struct GBAudioEnvelope* envelope) { envelope->currentVolume = envelope->initialVolume; _updateEnvelopeDead(envelope); - if (!envelope->dead) { - envelope->nextStep = envelope->stepTime; - } return envelope->initialVolume || envelope->direction; } @@ -937,6 +934,7 @@ static void _updateEnvelopeDead(struct GBAudioEnvelope* envelope) { envelope->dead = 1; } else { envelope->dead = 0; + envelope->nextStep = envelope->stepTime; } }