diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AXStructs.h b/Source/Core/Core/HW/DSPHLE/UCodes/AXStructs.h index 8d224c6f57..f819c066aa 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/AXStructs.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/AXStructs.h @@ -229,6 +229,7 @@ struct PBBiquadFilter union PBInfImpulseResponseWM { + u16 on; // 0: off, 2: biquad, other: low-pass PBLowPassFilter lpf; PBBiquadFilter biquad; }; diff --git a/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h b/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h index 10d93ad7cc..59813ac229 100644 --- a/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h +++ b/Source/Core/Core/HW/DSPHLE/UCodes/AXVoice.h @@ -562,6 +562,19 @@ void ProcessVoice(HLEAccelerator* accelerator, PB_TYPE& pb, const AXBuffers& buf // Wiimote mixing. if (pb.remote) { + if (new_filter && pb.remote_iir.on != 0) + { + // Only one filter at most for Wiimotes. + if (pb.remote_iir.on == 2) + { + BiquadFilter(samples, count, pb.remote_iir.biquad); + } + else + { + LowPassFilter(samples, count, pb.remote_iir.lpf); + } + } + // Old AXWii versions process ms per ms. u16 wm_count = count == 96 ? 18 : 6;