diff --git a/plugins/spu2-x/src/Mixer.cpp b/plugins/spu2-x/src/Mixer.cpp index 62874094e1..62d9dbed31 100644 --- a/plugins/spu2-x/src/Mixer.cpp +++ b/plugins/spu2-x/src/Mixer.cpp @@ -612,8 +612,9 @@ static __forceinline StereoOut32 MixVoice( uint coreidx, uint voiceidx ) else { // Continue processing voice, even if it's "off". Or else we miss interrupts! (Fatal Frame engine died because of this.) - if ((vc.LoopFlags & 3) != 3 || vc.LoopStartA != (vc.NextA & ~7) // not in a tight loop - || thiscore.IRQEnable && (thiscore.IRQA & ~7) == vc.LoopStartA // or should be interrupting regularly + if ((*GetMemPtr(vc.NextA & 0xFFFF8) >> 8 & 3) != 3 || vc.LoopStartA != (vc.NextA & ~7) // not in a tight loop + || Cores[0].IRQEnable && (Cores[0].IRQA & ~7) == vc.LoopStartA // or should be interrupting regularly + || Cores[1].IRQEnable && (Cores[1].IRQA & ~7) == vc.LoopStartA || !(thiscore.Regs.ENDX & 1 << voiceidx)) // or isn't currently flagged as having passed the endpoint { UpdatePitch(coreidx, voiceidx);