@@ -265,7 +265,7 @@ void AXWiiUCode::SetupProcessing(u32 init_addr)
int * ptr;
u32 samples;
} buffers[] = {
{m_samples_left , 32 }, {m_samples_right , 32 }, {m_samples_surround , 32 },
{m_samples_main_left , 32 }, {m_samples_main_right , 32 }, {m_samples_main_surround , 32 },
{m_samples_auxA_left, 32 }, {m_samples_auxA_right, 32 }, {m_samples_auxA_surround, 32 },
{m_samples_auxB_left, 32 }, {m_samples_auxB_right, 32 }, {m_samples_auxB_surround, 32 },
{m_samples_auxC_left, 32 }, {m_samples_auxC_right, 32 }, {m_samples_auxC_surround, 32 },
@@ -306,8 +306,8 @@ void AXWiiUCode::AddToLR(u32 val_addr, bool neg)
if (neg)
val = -val;
m_samples_left [i] += val;
m_samples_right [i] += val;
m_samples_main_left [i] += val;
m_samples_main_right [i] += val;
}
}
@@ -317,12 +317,12 @@ void AXWiiUCode::AddSubToLR(u32 val_addr)
for (int i = 0 ; i < 32 * 3 ; ++i)
{
int val = (int )Common::swap32 (*ptr++);
m_samples_left [i] += val;
m_samples_main_left [i] += val;
}
for (int i = 0 ; i < 32 * 3 ; ++i)
{
int val = (int )Common::swap32 (*ptr++);
m_samples_right [i] -= val;
m_samples_main_right [i] -= val;
}
}
@@ -453,7 +453,7 @@ void AXWiiUCode::ProcessPBList(u32 pb_addr)
while (pb_addr)
{
AXBuffers buffers = {{m_samples_left, m_samples_right, m_samples_surround ,
AXBuffers buffers = {{m_samples_main_left, m_samples_main_right, m_samples_main_surround ,
m_samples_auxA_left, m_samples_auxA_right, m_samples_auxA_surround,
m_samples_auxB_left, m_samples_auxB_right, m_samples_auxB_surround,
m_samples_auxC_left, m_samples_auxC_right, m_samples_auxC_surround,
@@ -498,9 +498,9 @@ void AXWiiUCode::MixAUXSamples(int aux_id, u32 write_addr, u32 read_addr, u16 vo
m_last_aux_volumes[aux_id] = volume;
std::array<int *, 3 > main_buffers{
m_samples_left ,
m_samples_right ,
m_samples_surround ,
m_samples_main_left ,
m_samples_main_right ,
m_samples_main_surround ,
};
std::array<const int *, 3 > buffers{};
@@ -578,7 +578,8 @@ void AXWiiUCode::UploadAUXMixLRSC(int aux_id, u32* addresses, u16 volume)
GenerateVolumeRamp (volume_ramp, m_last_aux_volumes[aux_id], volume, 96 );
m_last_aux_volumes[aux_id] = volume;
int * mix_dest[4 ] = {m_samples_left, m_samples_right, m_samples_surround, m_samples_auxC_left};
int * mix_dest[4 ] = {m_samples_main_left, m_samples_main_right, m_samples_main_surround,
m_samples_auxC_left};
for (u32 mix_i = 0 ; mix_i < 4 ; ++mix_i)
{
int * dl_ptr = (int *)HLEMemory_Get_Pointer (addresses[2 + mix_i]);
@@ -603,7 +604,7 @@ void AXWiiUCode::OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume, bool
std::array<int , 3 * 32 > upload_buffer{};
for (size_t i = 0 ; i < upload_buffer.size (); ++i)
upload_buffer[i] = Common::swap32 (m_samples_surround [i]);
upload_buffer[i] = Common::swap32 (m_samples_main_surround [i]);
memcpy (HLEMemory_Get_Pointer (surround_addr), upload_buffer.data (), sizeof (upload_buffer));
if (upload_auxc)
@@ -617,22 +618,22 @@ void AXWiiUCode::OutputSamples(u32 lr_addr, u32 surround_addr, u16 volume, bool
// Clamp internal buffers to 16 bits.
for (size_t i = 0 ; i < volume_ramp.size (); ++i)
{
int left = m_samples_left [i];
int right = m_samples_right [i];
int left = m_samples_main_left [i];
int right = m_samples_main_right [i];
// Apply global volume. Cast to s64 to avoid overflow.
left = ((s64)left * volume_ramp[i]) >> 15 ;
right = ((s64)right * volume_ramp[i]) >> 15 ;
m_samples_left [i] = std::clamp (left, -32767 , 32767 );
m_samples_right [i] = std::clamp (right, -32767 , 32767 );
m_samples_main_left [i] = std::clamp (left, -32767 , 32767 );
m_samples_main_right [i] = std::clamp (right, -32767 , 32767 );
}
std::array<s16, 3 * 32 * 2 > buffer;
for (size_t i = 0 ; i < 3 * 32 ; ++i)
{
buffer[2 * i] = Common::swap16 (m_samples_right [i]);
buffer[2 * i + 1 ] = Common::swap16 (m_samples_left [i]);
buffer[2 * i] = Common::swap16 (m_samples_main_right [i]);
buffer[2 * i + 1 ] = Common::swap16 (m_samples_main_left [i]);
}
memcpy (HLEMemory_Get_Pointer (lr_addr), buffer.data (), sizeof (buffer));