Separate left & right volumes in CSND_ChnSetVol
This commit is contained in:
parent
dba29fe501
commit
b15eb566dd
@ -29,9 +29,9 @@ Result csndExecChnCmds(void);
|
|||||||
void CSND_ChnSetPlayStateR(u32 channel, u32 value);
|
void CSND_ChnSetPlayStateR(u32 channel, u32 value);
|
||||||
void CSND_ChnSetPlayState(u32 channel, u32 value);
|
void CSND_ChnSetPlayState(u32 channel, u32 value);
|
||||||
void CSND_ChnSetLoop(u32 channel, u32 physaddr, u32 size);
|
void CSND_ChnSetLoop(u32 channel, u32 physaddr, u32 size);
|
||||||
void CSND_ChnSetVol(u32 channel, u16 value);
|
void CSND_ChnSetVol(u32 channel, u16 left, u16 right);
|
||||||
void CSND_ChnSetTimer(u32 channel, u32 timer);
|
void CSND_ChnSetTimer(u32 channel, u32 timer);
|
||||||
void CSND_ChnConfig(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize);
|
void CSND_ChnConfig(u32 channel, u32 looping, u32 encoding, u32 timer, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize);
|
||||||
|
|
||||||
Result CSND_UpdateChnInfo(bool waitdone);
|
Result CSND_UpdateChnInfo(bool waitdone);
|
||||||
|
|
||||||
|
@ -200,14 +200,14 @@ void CSND_ChnSetLoop(u32 channel, u32 physaddr, u32 size)
|
|||||||
csndWriteChnCmd(0x3, (u8*)&cmdparams);
|
csndWriteChnCmd(0x3, (u8*)&cmdparams);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSND_ChnSetVol(u32 channel, u16 value)
|
void CSND_ChnSetVol(u32 channel, u16 left, u16 right)
|
||||||
{
|
{
|
||||||
u32 cmdparams[0x18>>2];
|
u32 cmdparams[0x18>>2];
|
||||||
|
|
||||||
memset(cmdparams, 0, 0x18);
|
memset(cmdparams, 0, 0x18);
|
||||||
|
|
||||||
cmdparams[0] = channel & 0x1f;
|
cmdparams[0] = channel & 0x1f;
|
||||||
cmdparams[1] = value | (value<<16);
|
cmdparams[1] = left | (right<<16);
|
||||||
|
|
||||||
csndWriteChnCmd(0x9, (u8*)&cmdparams);
|
csndWriteChnCmd(0x9, (u8*)&cmdparams);
|
||||||
}
|
}
|
||||||
@ -224,9 +224,8 @@ void CSND_ChnSetTimer(u32 channel, u32 timer)
|
|||||||
csndWriteChnCmd(0x8, (u8*)&cmdparams);
|
csndWriteChnCmd(0x8, (u8*)&cmdparams);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSND_ChnConfig(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
|
void CSND_ChnConfig(u32 channel, u32 looping, u32 encoding, u32 timer, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
|
||||||
{
|
{
|
||||||
u32 val;
|
|
||||||
u32 cmdparams[0x18>>2];
|
u32 cmdparams[0x18>>2];
|
||||||
|
|
||||||
memset(cmdparams, 0, 0x18);
|
memset(cmdparams, 0, 0x18);
|
||||||
@ -238,10 +237,9 @@ void CSND_ChnConfig(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32
|
|||||||
cmdparams[0] |= (encoding & 3) << 12;
|
cmdparams[0] |= (encoding & 3) << 12;
|
||||||
cmdparams[0] |= (unk1 & 3) << 14;
|
cmdparams[0] |= (unk1 & 3) << 14;
|
||||||
|
|
||||||
val = CSND_TIMER(samplerate);
|
if (timer < 0x42) timer = 0x42;
|
||||||
if(val<0x42)val = 0x42;
|
if (timer > 0xffff) timer = 0xffff;
|
||||||
if(val>0xffff)val = 0xffff;
|
cmdparams[0] |= timer<<16;
|
||||||
cmdparams[0] |= val<<16;
|
|
||||||
|
|
||||||
cmdparams[3] = physaddr0;
|
cmdparams[3] = physaddr0;
|
||||||
cmdparams[4] = physaddr1;
|
cmdparams[4] = physaddr1;
|
||||||
@ -280,15 +278,13 @@ Result csndChnPlaySound(u32 channel, u32 looping, u32 encoding, u32 samplerate,
|
|||||||
physaddr0 = osConvertVirtToPhys((u32)vaddr0);
|
physaddr0 = osConvertVirtToPhys((u32)vaddr0);
|
||||||
physaddr1 = osConvertVirtToPhys((u32)vaddr1);
|
physaddr1 = osConvertVirtToPhys((u32)vaddr1);
|
||||||
|
|
||||||
CSND_ChnConfig(channel, looping, encoding, samplerate, unk0, unk1, physaddr0, physaddr1, totalbytesize);
|
CSND_ChnConfig(channel, looping, encoding, CSND_TIMER(samplerate), unk0, unk1, physaddr0, physaddr1, totalbytesize);
|
||||||
CSND_ChnSetTimer(channel, CSND_TIMER(samplerate));
|
|
||||||
if(looping)
|
if(looping)
|
||||||
{
|
{
|
||||||
if(physaddr1>physaddr0)totalbytesize-= (u32)physaddr1 - (u32)physaddr0;
|
if(physaddr1>physaddr0)totalbytesize-= (u32)physaddr1 - (u32)physaddr0;
|
||||||
CSND_ChnSetLoop(channel, physaddr1, totalbytesize);
|
CSND_ChnSetLoop(channel, physaddr1, totalbytesize);
|
||||||
}
|
}
|
||||||
CSND_ChnSetTimer(channel, CSND_TIMER(samplerate));
|
CSND_ChnSetVol(channel, 0xFFFF, 0xFFFF);
|
||||||
CSND_ChnSetVol(channel, 0xffff);
|
|
||||||
CSND_ChnSetPlayState(channel, 1);
|
CSND_ChnSetPlayState(channel, 1);
|
||||||
|
|
||||||
return CSND_UpdateChnInfo(false);
|
return CSND_UpdateChnInfo(false);
|
||||||
|
Loading…
Reference in New Issue
Block a user