diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_ADPCM.h b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_ADPCM.h index 23d6f399c5..b05bbdc11f 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_ADPCM.h +++ b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_ADPCM.h @@ -31,7 +31,7 @@ inline s16 ADPCM_Step(PBADPCMInfo &adpcm, u32& samplePos, u32 newSamplePos, u16 } int scale = 1 << (adpcm.pred_scale & 0xF); - int coef_idx = adpcm.pred_scale >> 4; + int coef_idx = (adpcm.pred_scale >> 4) & 7; s32 coef1 = adpcm.coefs[coef_idx * 2 + 0]; s32 coef2 = adpcm.coefs[coef_idx * 2 + 1]; diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h index 71c240a190..23d26da868 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h +++ b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h @@ -140,12 +140,14 @@ inline void MixAddVoice(ParamBlockType &pb, // identify these types of blocks. Updates did not write any looping values. if ( (pb.adpcm_loop_info.pred_scale || pb.adpcm_loop_info.yn1 || pb.adpcm_loop_info.yn2) - && pb.mixer_control == 0 - ) + && pb.mixer_control == 0 && pb.adpcm_loop_info.pred_scale <= 0x7F + ) { pb.audio_addr.looping = 1; } + + // Top Spin 3 Wii if (pb.audio_addr.sample_format > 25) pb.audio_addr.sample_format = 0;