]> Chaos Git - corbenik/ctrulib.git/commitdiff
Separate left & right volumes in CSND_ChnSetVol
authorfincs <fincs.alt1@gmail.com>
Thu, 1 Jan 2015 12:56:51 +0000 (13:56 +0100)
committerfincs <fincs.alt1@gmail.com>
Tue, 20 Jan 2015 16:53:51 +0000 (17:53 +0100)
libctru/include/3ds/services/csnd.h
libctru/source/services/csnd.c

index ae75c5af6fe486ea4ef71d39ecf6fa6167a8fb13..a9d65c386bf9746e742066ba503f23811d32ac30 100644 (file)
@@ -29,9 +29,9 @@ Result csndExecChnCmds(void);
 void CSND_ChnSetPlayStateR(u32 channel, u32 value);
 void CSND_ChnSetPlayState(u32 channel, u32 value);
 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_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);
 
index ac7d250e5f9fad6e1d9148f101c7c8e514d29c64..85d9bde2a58d8e87657aa9a86dbbab805ef84d7d 100644 (file)
@@ -200,14 +200,14 @@ void CSND_ChnSetLoop(u32 channel, u32 physaddr, u32 size)
        csndWriteChnCmd(0x3, (u8*)&cmdparams);
 }
 
-void CSND_ChnSetVol(u32 channel, u16 value)
+void CSND_ChnSetVol(u32 channel, u16 left, u16 right)
 {
        u32 cmdparams[0x18>>2];
 
        memset(cmdparams, 0, 0x18);
 
        cmdparams[0] = channel & 0x1f;
-       cmdparams[1] = value | (value<<16);
+       cmdparams[1] = left | (right<<16);
 
        csndWriteChnCmd(0x9, (u8*)&cmdparams);
 }
@@ -224,9 +224,8 @@ void CSND_ChnSetTimer(u32 channel, u32 timer)
        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];
 
        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] |= (unk1 & 3) << 14;
 
-       val = CSND_TIMER(samplerate);
-       if(val<0x42)val = 0x42;
-       if(val>0xffff)val = 0xffff;
-       cmdparams[0] |= val<<16;
+       if (timer < 0x42) timer = 0x42;
+       if (timer > 0xffff) timer = 0xffff;
+       cmdparams[0] |= timer<<16;
 
        cmdparams[3] = physaddr0;
        cmdparams[4] = physaddr1;
@@ -280,15 +278,13 @@ Result csndChnPlaySound(u32 channel, u32 looping, u32 encoding, u32 samplerate,
        physaddr0 = osConvertVirtToPhys((u32)vaddr0);
        physaddr1 = osConvertVirtToPhys((u32)vaddr1);
 
-       CSND_ChnConfig(channel, looping, encoding, samplerate, unk0, unk1, physaddr0, physaddr1, totalbytesize);
-       CSND_ChnSetTimer(channel, CSND_TIMER(samplerate));
+       CSND_ChnConfig(channel, looping, encoding, CSND_TIMER(samplerate), unk0, unk1, physaddr0, physaddr1, totalbytesize);
        if(looping)
        {
                if(physaddr1>physaddr0)totalbytesize-= (u32)physaddr1 - (u32)physaddr0;
                CSND_ChnSetLoop(channel, physaddr1, totalbytesize);
        }
-       CSND_ChnSetTimer(channel, CSND_TIMER(samplerate));
-       CSND_ChnSetVol(channel, 0xffff);
+       CSND_ChnSetVol(channel, 0xFFFF, 0xFFFF);
        CSND_ChnSetPlayState(channel, 1);
 
        return CSND_UpdateChnInfo(false);