GB Audio: Fix restarting envelope when writing to register (fixes #3067)

This commit is contained in:
Vicki Pfau 2023-12-20 02:18:19 -08:00
parent 1f6337fc1f
commit c8f4d4aad9
2 changed files with 2 additions and 3 deletions

View File

@ -10,6 +10,7 @@ Emulation fixes:
- ARM: Fake bpkt instruction should take no cycles (fixes mgba.io/i/2551) - 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 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 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 I/O: Read back proper SVBK value after writing 0 (fixes mgba.io/i/2921)
- GB I/O: Fix STAT writing IRQ trigger conditions (fixes mgba.io/i/2501) - GB I/O: Fix STAT writing IRQ trigger conditions (fixes mgba.io/i/2501)
- GB Serialize: Add missing Pocket Cam state to savestates - GB Serialize: Add missing Pocket Cam state to savestates

View File

@ -880,9 +880,6 @@ static void _sample(struct mTiming* timing, void* user, uint32_t cyclesLate) {
bool _resetEnvelope(struct GBAudioEnvelope* envelope) { bool _resetEnvelope(struct GBAudioEnvelope* envelope) {
envelope->currentVolume = envelope->initialVolume; envelope->currentVolume = envelope->initialVolume;
_updateEnvelopeDead(envelope); _updateEnvelopeDead(envelope);
if (!envelope->dead) {
envelope->nextStep = envelope->stepTime;
}
return envelope->initialVolume || envelope->direction; return envelope->initialVolume || envelope->direction;
} }
@ -967,6 +964,7 @@ static void _updateEnvelopeDead(struct GBAudioEnvelope* envelope) {
envelope->dead = 1; envelope->dead = 1;
} else { } else {
envelope->dead = 0; envelope->dead = 0;
envelope->nextStep = envelope->stepTime;
} }
} }