GB Audio: Make audio unsigned with bias (fixes #749)
Vicki Pfau vi@endrift.com
Sat, 08 Jul 2017 21:32:51 -0700
2 files changed,
7 insertions(+),
6 deletions(-)
M
CHANGES
→
CHANGES
@@ -62,6 +62,7 @@ - Qt: Fix LOG argument order
- Qt: Fix timezone issues with time overrides - Qt: Fix sprite export pausing game indefinitely (fixes mgba.io/i/841) - SDL: Fix potential race condition when pressing keys (fixes mgba.io/i/872) + - GB Audio: Make audio unsigned with bias (fixes mgba.io/i/749) Misc: - CMake: Fix CPack dependencies for libpng 1.6 - GBA: Detect hardware for Pokémon FireRed ROM hacks
M
src/gb/audio.c
→
src/gb/audio.c
@@ -620,8 +620,9 @@ sampleRight += audio->ch4.sample;
} } - *left = sampleLeft * (1 + audio->volumeLeft); - *right = sampleRight * (1 + audio->volumeRight); + int dcOffset = audio->style == GB_AUDIO_GBA ? 0 : 0x1FC; + *left = (sampleLeft - dcOffset) * (1 + audio->volumeLeft); + *right = (sampleRight - dcOffset) * (1 + audio->volumeRight); } static void _sample(struct mTiming* timing, void* user, uint32_t cyclesLate) {@@ -709,7 +710,7 @@ return (envelope->initialVolume || envelope->direction) && envelope->dead != 2;
} static void _updateSquareSample(struct GBAudioSquareChannel* ch) { - ch->sample = (ch->control.hi * 2 - 1) * ch->envelope.currentVolume * 0x8; + ch->sample = ch->control.hi * ch->envelope.currentVolume * 0x8; } static int32_t _updateSquareChannel(struct GBAudioSquareChannel* ch) {@@ -860,8 +861,7 @@ }
ch->sample = bitsCarry >> 4; break; } - ch->sample -= 8; - ch->sample *= volume * 4; + ch->sample *= volume * 2; audio->ch3.readable = true; if (audio->style == GB_AUDIO_DMG) { mTimingDeschedule(audio->timing, &audio->ch3Fade);@@ -888,7 +888,7 @@ int32_t cycles = 0;
do { int lsb = ch->lfsr & 1; - ch->sample = lsb * 0x10 - 0x8; + ch->sample = lsb * 0x8; ch->sample *= ch->envelope.currentVolume; ch->lfsr >>= 1; ch->lfsr ^= (lsb * 0x60) << (ch->power ? 0 : 8);