AXWii: handle mixer control more precisely

On GameCube, a ramp bit has no effect if its corresponding channel is
inactive. On Wii however, enabling just the ramp implicitly also enables
the channel. AXSetVoiceMix() never does that, so this commit should have
no impact on games unless they fiddle with the mixer control value
directly.
This commit is contained in:
Tillmann Karras 2022-05-11 23:31:35 +01:00
parent 333659cefa
commit 8438e647f2
1 changed files with 8 additions and 8 deletions

View File

@ -335,41 +335,41 @@ AXMixControl AXWiiUCode::ConvertMixerControl(u32 mixer_control)
if (mixer_control & 0x00000002)
ret |= MIX_MAIN_R;
if (mixer_control & 0x00000004)
ret |= MIX_MAIN_L_RAMP | MIX_MAIN_R_RAMP;
ret |= MIX_MAIN_L | MIX_MAIN_R | MIX_MAIN_L_RAMP | MIX_MAIN_R_RAMP;
if (mixer_control & 0x00000008)
ret |= MIX_MAIN_S;
if (mixer_control & 0x00000010)
ret |= MIX_MAIN_S_RAMP;
ret |= MIX_MAIN_S | MIX_MAIN_S_RAMP;
if (mixer_control & 0x00010000)
ret |= MIX_AUXA_L;
if (mixer_control & 0x00020000)
ret |= MIX_AUXA_R;
if (mixer_control & 0x00040000)
ret |= MIX_AUXA_L_RAMP | MIX_AUXA_R_RAMP;
ret |= MIX_AUXA_L | MIX_AUXA_R | MIX_AUXA_L_RAMP | MIX_AUXA_R_RAMP;
if (mixer_control & 0x00080000)
ret |= MIX_AUXA_S;
if (mixer_control & 0x00100000)
ret |= MIX_AUXA_S_RAMP;
ret |= MIX_AUXA_S | MIX_AUXA_S_RAMP;
if (mixer_control & 0x00200000)
ret |= MIX_AUXB_L;
if (mixer_control & 0x00400000)
ret |= MIX_AUXB_R;
if (mixer_control & 0x00800000)
ret |= MIX_AUXB_L_RAMP | MIX_AUXB_R_RAMP;
ret |= MIX_AUXB_L | MIX_AUXB_R | MIX_AUXB_L_RAMP | MIX_AUXB_R_RAMP;
if (mixer_control & 0x01000000)
ret |= MIX_AUXB_S;
if (mixer_control & 0x02000000)
ret |= MIX_AUXB_S_RAMP;
ret |= MIX_AUXB_S | MIX_AUXB_S_RAMP;
if (mixer_control & 0x04000000)
ret |= MIX_AUXC_L;
if (mixer_control & 0x08000000)
ret |= MIX_AUXC_R;
if (mixer_control & 0x10000000)
ret |= MIX_AUXC_L_RAMP | MIX_AUXC_R_RAMP;
ret |= MIX_AUXC_L | MIX_AUXC_R | MIX_AUXC_L_RAMP | MIX_AUXC_R_RAMP;
if (mixer_control & 0x20000000)
ret |= MIX_AUXC_S;
if (mixer_control & 0x40000000)
ret |= MIX_AUXC_S_RAMP;
ret |= MIX_AUXC_S | MIX_AUXC_S_RAMP;
return (AXMixControl)ret;
}