mirror of https://github.com/mgba-emu/mgba.git
GB Audio: Make audio unsigned with bias (fixes #749)
This commit is contained in:
parent
15d66422a9
commit
539e63d49b
1
CHANGES
1
CHANGES
|
@ -1,6 +1,7 @@
|
||||||
0.7.0: (Future)
|
0.7.0: (Future)
|
||||||
Bugfixes:
|
Bugfixes:
|
||||||
- GB Audio: Fix zombie mode bit masking
|
- GB Audio: Fix zombie mode bit masking
|
||||||
|
- GB Audio: Make audio unsigned with bias (fixes mgba.io/i/749)
|
||||||
Misc:
|
Misc:
|
||||||
- GBA Timer: Use global cycles for timers
|
- GBA Timer: Use global cycles for timers
|
||||||
|
|
||||||
|
|
|
@ -620,8 +620,9 @@ void GBAudioSamplePSG(struct GBAudio* audio, int16_t* left, int16_t* right) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*left = sampleLeft * (1 + audio->volumeLeft);
|
int dcOffset = audio->style == GB_AUDIO_GBA ? 0 : 0x1FC;
|
||||||
*right = sampleRight * (1 + audio->volumeRight);
|
*left = (sampleLeft - dcOffset) * (1 + audio->volumeLeft);
|
||||||
|
*right = (sampleRight - dcOffset) * (1 + audio->volumeRight);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _sample(struct mTiming* timing, void* user, uint32_t cyclesLate) {
|
static void _sample(struct mTiming* timing, void* user, uint32_t cyclesLate) {
|
||||||
|
@ -710,7 +711,7 @@ bool _writeEnvelope(struct GBAudioEnvelope* envelope, uint8_t value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _updateSquareSample(struct GBAudioSquareChannel* ch) {
|
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) {
|
static int32_t _updateSquareChannel(struct GBAudioSquareChannel* ch) {
|
||||||
|
@ -861,8 +862,7 @@ static void _updateChannel3(struct mTiming* timing, void* user, uint32_t cyclesL
|
||||||
ch->sample = bitsCarry >> 4;
|
ch->sample = bitsCarry >> 4;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ch->sample -= 8;
|
ch->sample *= volume * 2;
|
||||||
ch->sample *= volume * 4;
|
|
||||||
audio->ch3.readable = true;
|
audio->ch3.readable = true;
|
||||||
if (audio->style == GB_AUDIO_DMG) {
|
if (audio->style == GB_AUDIO_DMG) {
|
||||||
mTimingDeschedule(audio->timing, &audio->ch3Fade);
|
mTimingDeschedule(audio->timing, &audio->ch3Fade);
|
||||||
|
@ -889,7 +889,7 @@ static void _updateChannel4(struct mTiming* timing, void* user, uint32_t cyclesL
|
||||||
|
|
||||||
do {
|
do {
|
||||||
int lsb = ch->lfsr & 1;
|
int lsb = ch->lfsr & 1;
|
||||||
ch->sample = lsb * 0x10 - 0x8;
|
ch->sample = lsb * 0x8;
|
||||||
ch->sample *= ch->envelope.currentVolume;
|
ch->sample *= ch->envelope.currentVolume;
|
||||||
ch->lfsr >>= 1;
|
ch->lfsr >>= 1;
|
||||||
ch->lfsr ^= (lsb * 0x60) << (ch->power ? 0 : 8);
|
ch->lfsr ^= (lsb * 0x60) << (ch->power ? 0 : 8);
|
||||||
|
|
Loading…
Reference in New Issue