Merge branch 'Capcom-Music-Loop'
* Capcom-Music-Loop: Removed the fake DMA wait time as it is no longer needed after the aram-dma-fixes branch is merged. This fixes the Resident Evil 2/3 cutscene audio in DSP LLE mode. Fixes issue 2723. Changed the loop end address detection to an exact match with the current address for ADPCM audio. Fixes the non-looping music in PN03.
This commit is contained in:
commit
882d5161f8
|
@ -168,7 +168,8 @@ u16 dsp_read_accelerator()
|
||||||
if (Address >= EndAddress)
|
if (Address >= EndAddress)
|
||||||
{
|
{
|
||||||
// Set address back to start address.
|
// Set address back to start address.
|
||||||
Address = (g_dsp.ifx_regs[DSP_ACSAH] << 16) | g_dsp.ifx_regs[DSP_ACSAL];
|
if (Address == EndAddress)
|
||||||
|
Address = (g_dsp.ifx_regs[DSP_ACSAH] << 16) | g_dsp.ifx_regs[DSP_ACSAL];
|
||||||
DSPCore_SetException(EXP_ACCOV);
|
DSPCore_SetException(EXP_ACCOV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -697,14 +697,12 @@ void UpdateAudioDMA()
|
||||||
|
|
||||||
void Do_ARAM_DMA()
|
void Do_ARAM_DMA()
|
||||||
{
|
{
|
||||||
// Fake the DMA taking time to complete. The delay is not accurate, but
|
|
||||||
// seems like a good estimate
|
|
||||||
CoreTiming::ScheduleEvent_Threadsafe(g_arDMA.Cnt.count >> 1, et_GenerateDSPInterrupt, INT_ARAM | (1<<16));
|
|
||||||
|
|
||||||
// Emulating the DMA wait time fixes Knockout Kings 2003 in DSP HLE mode
|
// Emulating the DMA wait time fixes Knockout Kings 2003 in DSP HLE mode
|
||||||
if (!GetDSPEmulator()->IsLLE())
|
if (!GetDSPEmulator()->IsLLE())
|
||||||
g_dspState.DSPControl.DMAState = 1;
|
g_dspState.DSPControl.DMAState = 1;
|
||||||
|
|
||||||
|
GenerateDSPInterrupt(INT_ARAM, true);
|
||||||
|
|
||||||
// Real hardware DMAs in 32byte chunks, but we can get by with 8byte chunks
|
// Real hardware DMAs in 32byte chunks, but we can get by with 8byte chunks
|
||||||
if (g_arDMA.Cnt.dir)
|
if (g_arDMA.Cnt.dir)
|
||||||
{
|
{
|
||||||
|
|
|
@ -236,7 +236,8 @@ inline void MixAddVoice(ParamBlockType &pb,
|
||||||
{
|
{
|
||||||
if (pb.audio_addr.looping == 1)
|
if (pb.audio_addr.looping == 1)
|
||||||
{
|
{
|
||||||
samplePos = loopPos;
|
if (samplePos == sampleEnd || (pb.audio_addr.sample_format != AUDIOFORMAT_ADPCM))
|
||||||
|
samplePos = loopPos;
|
||||||
if ((!pb.is_stream) && (pb.audio_addr.sample_format == AUDIOFORMAT_ADPCM))
|
if ((!pb.is_stream) && (pb.audio_addr.sample_format == AUDIOFORMAT_ADPCM))
|
||||||
{
|
{
|
||||||
pb.adpcm.yn1 = pb.adpcm_loop_info.yn1;
|
pb.adpcm.yn1 = pb.adpcm_loop_info.yn1;
|
||||||
|
|
Loading…
Reference in New Issue