Implemented dpop samples support
This commit is contained in:
parent
071b27f0bb
commit
b0cbac174b
|
@ -128,7 +128,17 @@ struct PBUpdates
|
||||||
// and ramped down on a per-sample basis to provide a gentle "roll off."
|
// and ramped down on a per-sample basis to provide a gentle "roll off."
|
||||||
struct PBDpop
|
struct PBDpop
|
||||||
{
|
{
|
||||||
s16 unknown[9];
|
s16 left;
|
||||||
|
s16 auxA_left;
|
||||||
|
s16 auxB_left;
|
||||||
|
|
||||||
|
s16 right;
|
||||||
|
s16 auxA_right;
|
||||||
|
s16 auxB_right;
|
||||||
|
|
||||||
|
s16 surround;
|
||||||
|
s16 auxA_surround;
|
||||||
|
s16 auxB_surround;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PBDpopWii
|
struct PBDpopWii
|
||||||
|
|
|
@ -306,7 +306,7 @@ void GetInputSamples(PB_TYPE& pb, s16* samples)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add samples to an output buffer, with optional volume ramping.
|
// Add samples to an output buffer, with optional volume ramping.
|
||||||
void MixAdd(int* out, const s16* input, u16* pvol, bool ramp)
|
void MixAdd(int* out, const s16* input, u16* pvol, s16* dpop, bool ramp)
|
||||||
{
|
{
|
||||||
u16& volume = pvol[0];
|
u16& volume = pvol[0];
|
||||||
u16 volume_delta = pvol[1];
|
u16 volume_delta = pvol[1];
|
||||||
|
@ -323,8 +323,10 @@ void MixAdd(int* out, const s16* input, u16* pvol, bool ramp)
|
||||||
sample *= volume;
|
sample *= volume;
|
||||||
sample >>= 15;
|
sample >>= 15;
|
||||||
|
|
||||||
out[i] += (s32)sample;
|
out[i] += (s16)sample;
|
||||||
volume += volume_delta;
|
volume += volume_delta;
|
||||||
|
|
||||||
|
*dpop = (s16)sample;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -357,33 +359,33 @@ void Process1ms(PB_TYPE& pb, const AXBuffers& buffers, AXMixControl mctrl)
|
||||||
// TODO: Handle DPL2 on AUXB.
|
// TODO: Handle DPL2 on AUXB.
|
||||||
|
|
||||||
if (mctrl & MIX_L)
|
if (mctrl & MIX_L)
|
||||||
MixAdd(buffers.left, samples, &pb.mixer.left, mctrl & MIX_L_RAMP);
|
MixAdd(buffers.left, samples, &pb.mixer.left, &pb.dpop.left, mctrl & MIX_L_RAMP);
|
||||||
if (mctrl & MIX_R)
|
if (mctrl & MIX_R)
|
||||||
MixAdd(buffers.right, samples, &pb.mixer.right, mctrl & MIX_R_RAMP);
|
MixAdd(buffers.right, samples, &pb.mixer.right, &pb.dpop.right, mctrl & MIX_R_RAMP);
|
||||||
if (mctrl & MIX_S)
|
if (mctrl & MIX_S)
|
||||||
MixAdd(buffers.surround, samples, &pb.mixer.surround, mctrl & MIX_S_RAMP);
|
MixAdd(buffers.surround, samples, &pb.mixer.surround, &pb.dpop.surround, mctrl & MIX_S_RAMP);
|
||||||
|
|
||||||
if (mctrl & MIX_AUXA_L)
|
if (mctrl & MIX_AUXA_L)
|
||||||
MixAdd(buffers.auxA_left, samples, &pb.mixer.auxA_left, mctrl & MIX_AUXA_L_RAMP);
|
MixAdd(buffers.auxA_left, samples, &pb.mixer.auxA_left, &pb.dpop.auxA_left, mctrl & MIX_AUXA_L_RAMP);
|
||||||
if (mctrl & MIX_AUXA_R)
|
if (mctrl & MIX_AUXA_R)
|
||||||
MixAdd(buffers.auxA_right, samples, &pb.mixer.auxA_right, mctrl & MIX_AUXA_R_RAMP);
|
MixAdd(buffers.auxA_right, samples, &pb.mixer.auxA_right, &pb.dpop.auxA_right, mctrl & MIX_AUXA_R_RAMP);
|
||||||
if (mctrl & MIX_AUXA_S)
|
if (mctrl & MIX_AUXA_S)
|
||||||
MixAdd(buffers.auxA_surround, samples, &pb.mixer.auxA_surround, mctrl & MIX_AUXA_S_RAMP);
|
MixAdd(buffers.auxA_surround, samples, &pb.mixer.auxA_surround, &pb.dpop.auxA_surround, mctrl & MIX_AUXA_S_RAMP);
|
||||||
|
|
||||||
if (mctrl & MIX_AUXB_L)
|
if (mctrl & MIX_AUXB_L)
|
||||||
MixAdd(buffers.auxB_left, samples, &pb.mixer.auxB_left, mctrl & MIX_AUXB_L_RAMP);
|
MixAdd(buffers.auxB_left, samples, &pb.mixer.auxB_left, &pb.dpop.auxB_left, mctrl & MIX_AUXB_L_RAMP);
|
||||||
if (mctrl & MIX_AUXB_R)
|
if (mctrl & MIX_AUXB_R)
|
||||||
MixAdd(buffers.auxB_right, samples, &pb.mixer.auxB_right, mctrl & MIX_AUXB_R_RAMP);
|
MixAdd(buffers.auxB_right, samples, &pb.mixer.auxB_right, &pb.dpop.auxB_right, mctrl & MIX_AUXB_R_RAMP);
|
||||||
if (mctrl & MIX_AUXB_S)
|
if (mctrl & MIX_AUXB_S)
|
||||||
MixAdd(buffers.auxB_surround, samples, &pb.mixer.auxB_surround, mctrl & MIX_AUXB_S_RAMP);
|
MixAdd(buffers.auxB_surround, samples, &pb.mixer.auxB_surround, &pb.dpop.auxB_surround, mctrl & MIX_AUXB_S_RAMP);
|
||||||
|
|
||||||
#ifdef AX_WII
|
#ifdef AX_WII
|
||||||
if (mctrl & MIX_AUXC_L)
|
if (mctrl & MIX_AUXC_L)
|
||||||
MixAdd(buffers.auxC_left, samples, &pb.mixer.auxC_left, mctrl & MIX_AUXC_L_RAMP);
|
MixAdd(buffers.auxC_left, samples, &pb.mixer.auxC_left, &pb.dpop.auxC_left, mctrl & MIX_AUXC_L_RAMP);
|
||||||
if (mctrl & MIX_AUXC_R)
|
if (mctrl & MIX_AUXC_R)
|
||||||
MixAdd(buffers.auxC_right, samples, &pb.mixer.auxC_right, mctrl & MIX_AUXC_R_RAMP);
|
MixAdd(buffers.auxC_right, samples, &pb.mixer.auxC_right, &pb.dpop.auxC_right, mctrl & MIX_AUXC_R_RAMP);
|
||||||
if (mctrl & MIX_AUXC_S)
|
if (mctrl & MIX_AUXC_S)
|
||||||
MixAdd(buffers.auxC_surround, samples, &pb.mixer.auxC_surround, mctrl & MIX_AUXC_S_RAMP);
|
MixAdd(buffers.auxC_surround, samples, &pb.mixer.auxC_surround, &pb.dpop.auxC_surround, mctrl & MIX_AUXC_S_RAMP);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Optionally, phase shift left or right channel to simulate 3D sound.
|
// Optionally, phase shift left or right channel to simulate 3D sound.
|
||||||
|
|
Loading…
Reference in New Issue