Thanks to Wagnard28 and other lots of people's test, now this will hopefully solve the troubling regression problems between r4616 and r4617.

Sorry about such frequent commits in a short time

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@4619 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
ayuanx
2009-11-27 20:21:12 +00:00
parent 5e31f22e50
commit ea732db998
4 changed files with 26 additions and 25 deletions

View File

@ -184,7 +184,7 @@ void CUCode_AXWii::MixAdd_(short* _pBuffer, int _iSize, ParamBlockType &PB)
if (!ReadOutPBWii(blockAddr, PB))
break;
ProcessUpdates(PB);
MixAddVoice(PB, templbuffer, temprbuffer, _iSize, true, _CRC);
MixAddVoice(PB, templbuffer, temprbuffer, _iSize, true, UCODE_AXWII);
if (!WriteBackPBWii(blockAddr, PB))
break;

View File

@ -18,6 +18,7 @@
#ifndef _UCODE_AX_VOICE_H
#define _UCODE_AX_VOICE_H
#include "UCodes.h"
#include "UCode_AX_ADPCM.h"
#include "UCode_AX.h"
#include "../main.h"
@ -82,7 +83,7 @@ inline bool WriteBackPBWii(u32 pb_address, ParamBlockType& PB)
}
template<class ParamBlockType>
inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer, int _iSize, bool Wii, u32 CRC = 0)
inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer, int _iSize, bool Wii, u32 _uCode = UCODE_ROM)
{
ratioFactor = 32000.0f / (float)soundStream->GetMixer()->GetSampleRate();
@ -245,15 +246,14 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer,
}
else
{
// This accurate boundary wrapping will fix the hangup in many Wii games like:
// New Super Mario Bros.Wii, Fatal Frame 4,
// Resident Evil Darkside Chronicles, Muramasa The Demon Blade, etc.
samplePos = newSamplePos - sampleEnd + loopPos;
if (Wii && (CRC == 0xfa450138))
if (Wii && (_uCode == UCODE_AXWII))
{
// Some Wii games check this flag and will turn it off when necessary
// If that is the case, DSP should not touch it
// This accurate boundary wrapping will fix the hangup in many AXWii games like:
// New Super Mario Bros.Wii, Fatal Frame 4, Resident Evil Darkside Chronicles
samplePos = newSamplePos - sampleEnd + loopPos;
// And these AXWii games check this flag and will turn it off when necessary
// So DSP should not touch it
//
//pb.running = 0;
}

View File

@ -24,6 +24,7 @@
#define UCODE_ROM 0x0000000
#define UCODE_INIT_AUDIO_SYSTEM 0x0000001
#define UCODE_AXWII 0x1000000
class CMailHandler;