GB Audio: Fix channel 3 volume being changed between samples (fixes #1896)
This commit is contained in:
parent
3385f02b51
commit
e9ec009836
1
CHANGES
1
CHANGES
@ -4,6 +4,7 @@ Features:
|
|||||||
- Debugger: Add range watchpoints
|
- Debugger: Add range watchpoints
|
||||||
Emulation fixes:
|
Emulation fixes:
|
||||||
- GB Audio: Fix channels 1/2 not playing when resetting volume (fixes mgba.io/i/2614)
|
- GB Audio: Fix channels 1/2 not playing when resetting volume (fixes mgba.io/i/2614)
|
||||||
|
- GB Audio: Fix channel 3 volume being changed between samples (fixes mgba.io/i/1896)
|
||||||
- GB Serialize: Don't write BGP/OBP when loading SCGB state (fixes mgba.io/i/2694)
|
- GB Serialize: Don't write BGP/OBP when loading SCGB state (fixes mgba.io/i/2694)
|
||||||
- GB SIO: Further fix bidirectional transfer starting
|
- GB SIO: Further fix bidirectional transfer starting
|
||||||
- GBA: Fix resetting key IRQ state (fixes mgba.io/i/2716)
|
- GBA: Fix resetting key IRQ state (fixes mgba.io/i/2716)
|
||||||
|
@ -269,6 +269,29 @@ void GBAudioWriteNR31(struct GBAudio* audio, uint8_t value) {
|
|||||||
void GBAudioWriteNR32(struct GBAudio* audio, uint8_t value) {
|
void GBAudioWriteNR32(struct GBAudio* audio, uint8_t value) {
|
||||||
GBAudioRun(audio, mTimingCurrentTime(audio->timing), 0x4);
|
GBAudioRun(audio, mTimingCurrentTime(audio->timing), 0x4);
|
||||||
audio->ch3.volume = GBAudioRegisterBankVolumeGetVolumeGB(value);
|
audio->ch3.volume = GBAudioRegisterBankVolumeGetVolumeGB(value);
|
||||||
|
|
||||||
|
audio->ch3.sample = audio->ch3.wavedata8[audio->ch3.window >> 1];
|
||||||
|
if (!(audio->ch3.window & 1)) {
|
||||||
|
audio->ch3.sample >>= 4;
|
||||||
|
}
|
||||||
|
audio->ch3.sample &= 0xF;
|
||||||
|
int volume;
|
||||||
|
switch (audio->ch3.volume) {
|
||||||
|
case 0:
|
||||||
|
volume = 4;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
volume = 0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
volume = 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
case 3:
|
||||||
|
volume = 2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
audio->ch3.sample >>= volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GBAudioWriteNR33(struct GBAudio* audio, uint8_t value) {
|
void GBAudioWriteNR33(struct GBAudio* audio, uint8_t value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user