Updated CSND header/.c, including enums for the looping/encoding fields.

This commit is contained in:
yellows8 2014-08-05 22:22:43 -04:00
parent 7a54bb623a
commit a1741254cf
2 changed files with 23 additions and 11 deletions

View File

@ -1,18 +1,30 @@
#ifndef CSND_H #ifndef CSND_H
#define 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 #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_initialize(u32* sharedMem);
Result CSND_shutdown(); Result CSND_shutdown();
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);//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); void CSND_setchannel_playbackstate(u32 channel, u32 value);//value0 = pause playback, value1 = resume playback.
void CSND_sharedmemtype0_cmd0(u32 channel, u32 value); 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); 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); 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(u32 entryindex, u32 *out);
Result CSND_getchannelstate_isplaying(u32 entryindex, u8 *status); Result CSND_getchannelstate_isplaying(u32 entryindex, u8 *status);

View File

@ -232,7 +232,7 @@ void CSND_sharedmemtype0_cmd8(u32 channel, u32 samplerate)
CSND_writesharedmem_cmdtype0(0x8, (u8*)&cmdparams); 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 val;
u32 cmdparams[0x18>>2]; 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] = channel & 0x1f;
cmdparams[0] |= (unk0 & 0xf) << 6; cmdparams[0] |= (unk0 & 0xf) << 6;
if(!looping)cmdparams[0] |= 2 << 10; if(looping==CSND_LOOP_DISABLE)cmdparams[0] |= 2 << 10;
if(looping)cmdparams[0] |= 1 << 10; if(looping==CSND_LOOP_ENABLE)cmdparams[0] |= 1 << 10;
cmdparams[0] |= (encoding & 3) << 12; cmdparams[0] |= (encoding & 3) << 12;
cmdparams[0] |= (unk1 & 3) << 14; cmdparams[0] |= (unk1 & 3) << 14;
@ -282,7 +282,7 @@ Result CSND_sharedmemtype0_cmdupdatestate(int waitdone)
return 0; 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 physaddr0 = 0;
u32 physaddr1 = 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_cmde(channel, looping, encoding, samplerate, unk0, unk1, physaddr0, physaddr1, totalbytesize);
CSND_sharedmemtype0_cmd8(channel, samplerate); 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_cmd8(channel, samplerate);
CSND_sharedmemtype0_cmd9(channel, 0xffff); CSND_sharedmemtype0_cmd9(channel, 0xffff);
CSND_setchannel_playbackstate(channel, 1); CSND_setchannel_playbackstate(channel, 1);