]> Chaos Git - corbenik/ctrulib.git/commitdiff
Updated CSND header/.c, including enums for the looping/encoding fields.
authoryellows8 <yellows8@users.noreply.github.com>
Wed, 6 Aug 2014 02:22:43 +0000 (22:22 -0400)
committeryellows8 <yellows8@users.noreply.github.com>
Wed, 6 Aug 2014 02:22:43 +0000 (22:22 -0400)
libctru/include/ctr/CSND.h
libctru/source/CSND.c

index 3909cdcba9fa2aaf52a50993f3eb84973652ed2d..408d1dac034273580fab44c864167d6e6c992d1a 100644 (file)
@@ -1,18 +1,30 @@
 #ifndef CSND_H
 #define CSND_H
 
+//See here regarding CSND shared-mem commands, etc: http://3dbrew.org/wiki/CSND_Shared_Memory
+
 #define CSND_SHAREDMEM_DEFAULT 0x10004000
 
-//See here regarding CSND shared-mem commands, etc: http://3dbrew.org/wiki/CSND_Shared_Memory
+typedef enum{
+       CSND_LOOP_DISABLE,
+       CSND_LOOP_ENABLE
+} CSND_LOOPING;
+
+typedef enum{
+       CSND_ENCODING_PCM8,
+       CSND_ENCODING_PCM16,
+       CSND_ENCODING_IMA_ADPCM,
+       CSND_ENCODING_PSG//"3 = PSG, similar to DS?"
+} CSND_ENCODING;
 
 Result CSND_initialize(u32* sharedMem);
 Result CSND_shutdown();
 
-Result CSND_playsound(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 *vaddr0, u32 *vaddr1, u32 totalbytesize, u32 unk0, u32 unk1);
-void CSND_setchannel_playbackstate(u32 channel, u32 value);
-void CSND_sharedmemtype0_cmd0(u32 channel, u32 value);
-void CSND_writesharedmem_cmdtype0(u16 cmdid, u8 *cmdparams);
-Result CSND_sharedmemtype0_cmdupdatestate(int waitdone);
+Result CSND_playsound(u32 channel, CSND_LOOPING looping, CSND_ENCODING encoding, u32 samplerate, u32 *vaddr0, u32 *vaddr1, u32 totalbytesize, u32 unk0, u32 unk1);//vaddr0 is the initial virtual-address of the audio-data. vaddr1 is the audio-data virtual-address used for looping, when playback is restarted for looping.
+void CSND_setchannel_playbackstate(u32 channel, u32 value);//value0 = pause playback, value1 = resume playback.
+void CSND_sharedmemtype0_cmd0(u32 channel, u32 value);//value1 = start playback. value0 = stop playback, and reset the CSND registers for this channel.
+void CSND_writesharedmem_cmdtype0(u16 cmdid, u8 *cmdparams);//This can be used to use arbitary CSND shared-memory commands.
+Result CSND_sharedmemtype0_cmdupdatestate(int waitdone);//This must be used after using CSND shared-memory commands in order for those commands to be processed. CSND_playsound() and CSND_getchannelstate() use this automatically.
 
 Result CSND_getchannelstate(u32 entryindex, u32 *out);
 Result CSND_getchannelstate_isplaying(u32 entryindex, u8 *status);
index f911b369631577a8e7bc8420c41fb49fd35b9992..cb40db46ad7c38e801856687641647dedc851914 100644 (file)
@@ -232,7 +232,7 @@ void CSND_sharedmemtype0_cmd8(u32 channel, u32 samplerate)
        CSND_writesharedmem_cmdtype0(0x8, (u8*)&cmdparams);
 }
 
-void CSND_sharedmemtype0_cmde(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
+void CSND_sharedmemtype0_cmde(u32 channel, CSND_LOOPING looping, CSND_ENCODING encoding, u32 samplerate, u32 unk0, u32 unk1, u32 physaddr0, u32 physaddr1, u32 totalbytesize)
 {
        u32 val;
        u32 cmdparams[0x18>>2];
@@ -241,8 +241,8 @@ void CSND_sharedmemtype0_cmde(u32 channel, u32 looping, u32 encoding, u32 sample
 
        cmdparams[0] = channel & 0x1f;
        cmdparams[0] |= (unk0 & 0xf) << 6;
-       if(!looping)cmdparams[0] |= 2 << 10;
-       if(looping)cmdparams[0] |= 1 << 10;
+       if(looping==CSND_LOOP_DISABLE)cmdparams[0] |= 2 << 10;
+       if(looping==CSND_LOOP_ENABLE)cmdparams[0] |= 1 << 10;
        cmdparams[0] |= (encoding & 3) << 12;
        cmdparams[0] |= (unk1 & 3) << 14;
 
@@ -282,7 +282,7 @@ Result CSND_sharedmemtype0_cmdupdatestate(int waitdone)
        return 0;
 }
 
-Result CSND_playsound(u32 channel, u32 looping, u32 encoding, u32 samplerate, u32 *vaddr0, u32 *vaddr1, u32 totalbytesize, u32 unk0, u32 unk1)
+Result CSND_playsound(u32 channel, CSND_LOOPING looping, CSND_ENCODING encoding, u32 samplerate, u32 *vaddr0, u32 *vaddr1, u32 totalbytesize, u32 unk0, u32 unk1)
 {
        u32 physaddr0 = 0;
        u32 physaddr1 = 0;
@@ -292,7 +292,7 @@ Result CSND_playsound(u32 channel, u32 looping, u32 encoding, u32 samplerate, u3
 
        CSND_sharedmemtype0_cmde(channel, looping, encoding, samplerate, unk0, unk1, physaddr0, physaddr1, totalbytesize);
        CSND_sharedmemtype0_cmd8(channel, samplerate);
-       if(looping)CSND_sharedmemtype0_cmd3(channel, physaddr0, totalbytesize);
+       if(looping==CSND_LOOP_ENABLE)CSND_sharedmemtype0_cmd3(channel, physaddr0, totalbytesize);
        CSND_sharedmemtype0_cmd8(channel, samplerate);
        CSND_sharedmemtype0_cmd9(channel, 0xffff);
        CSND_setchannel_playbackstate(channel, 1);