all repos — mgba @ ed562db025d1836db95e70a9654a411ac494725c

mGBA Game Boy Advance Emulator

DS Audio: Fix ADPCM initial state
Vicki Pfau vi@endrift.com
Wed, 22 Mar 2017 00:16:26 -0700
commit

ed562db025d1836db95e70a9654a411ac494725c

parent

b41073bda3c218242ad6bb4b80ab04469a39a933

1 files changed, 4 insertions(+), 2 deletions(-)

jump to
M src/ds/audio.csrc/ds/audio.c

@@ -146,8 +146,10 @@ mTimingSchedule(&audio->p->ds7.timing, &ch->updateEvent, 0);

if (ch->format == 2) { uint32_t header = audio->p->ds7.cpu->memory.load32(audio->p->ds7.cpu, ch->source, NULL); ch->offset += 4; - ch->adpcmStartSample = header &= 0xFFFF; + ch->adpcmStartSample = header & 0xFFFF; ch->adpcmStartIndex = header >> 16; + ch->adpcmSample = ch->adpcmStartSample; + ch->adpcmIndex = ch->adpcmStartIndex; } } ch->enable = DSRegisterSOUNDxCNTIsBusy(reg);

@@ -192,6 +194,7 @@ audio->sampleRight = sampleRight >> 6;

} static void _updateAdpcm(struct DSAudioChannel* ch, int sample) { + ch->sample = ch->adpcmSample; if (ch->adpcmIndex < 0) { ch->adpcmIndex = 0; } else if (ch->adpcmIndex > 88) {

@@ -222,7 +225,6 @@ } else {

ch->adpcmSample = newSample; } } - ch->sample = ch->adpcmSample; ch->adpcmIndex += _adpcmIndexTable[sample & 0x7]; }