Difference between revisions of "CSND Shared Memory"
Jump to navigation
Jump to search
Line 51: | Line 51: | ||
This sets the sample rate. | This sets the sample rate. | ||
+ | |||
+ | =Command 0xB= | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Index Byte | ||
+ | ! Size | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x2 | ||
+ | | 2 | ||
+ | | CmdID 0xB | ||
+ | |- | ||
+ | | 0xC | ||
+ | | 2 | ||
+ | | User processes set this to: [https://github.com/3dshax/ctr/blob/master/ctrtool/cwav.h cwav_imaadpcminfo.data] | ||
+ | |- | ||
+ | | 0x10 | ||
+ | | 1 | ||
+ | | User processes set this to: [https://github.com/3dshax/ctr/blob/master/ctrtool/cwav.h cwav_imaadpcminfo.tableindex] | ||
+ | |- | ||
+ | | 0x11 | ||
+ | | 0xF | ||
+ | | Unused, all-zero. | ||
+ | |} | ||
+ | |||
+ | This command is used for initializing IMA-ADPCM state(when IMA-ADPCM encoding is used), prior to using command 0xE. | ||
=Command 0xE= | =Command 0xE= |
Revision as of 23:57, 25 August 2013
This page describes the structure of the CSND shared memory.
Type0 Command Structure
Index Byte | Size | Description |
---|---|---|
0x0 | 2 | Offset in shared-memory for the command to process immediately after this one, when not 0xFFFF. |
0x2 | 2 | CommandID |
0x4 | 1 | This is initially zero when this command data is written by the user process, once the CSND module finishes processing the command this is set to 0x1. |
0x5 | 3 | Padding? |
0x8 | 4 | The low 5-bits for this field is the the channel-index. This word is used for command parameters as well. |
0xC | 0x14 | Command parameters |
Type0 Commands
Command 0x8
Index Byte | Size | Description |
---|---|---|
0x2 | 2 | CmdID 0x8 |
0xC | 4 | s32 value = (s32)(6.7027964E+07f / ((float)samplerate * 1.0f)) |
This sets the sample rate.
Command 0xB
Index Byte | Size | Description |
---|---|---|
0x2 | 2 | CmdID 0xB |
0xC | 2 | User processes set this to: cwav_imaadpcminfo.data |
0x10 | 1 | User processes set this to: cwav_imaadpcminfo.tableindex |
0x11 | 0xF | Unused, all-zero. |
This command is used for initializing IMA-ADPCM state(when IMA-ADPCM encoding is used), prior to using command 0xE.
Command 0xE
Index Byte | Size | Description |
---|---|---|
0x2 | 2 | CmdID 0xE |
0x8 | 4 | See below. |
0xC | 4 | See below. Usually zero? |
0x10 | 4 | See below. Usually zero? |
0x14 | 4 | Physical address for the audio data, for the main channel. |
0x18 | 4 | Physical address for the audio data, for the second channel. When this address is not 0x0, this is used for stereo audio. Otherwise when 0x0, mono audio is used via the above main address. |
0x1C | 4 | Total byte-size for the audio data. |
This initializes the CSND channel registers located at: 0x1EC03400 + (channel_index*0x20).
Parameter word 0x8
Bit | Description |
---|---|
5-0 | Channel index |
9-6 | ? |
11-10 | 1 = enable looping, 2 = disable looping. |
13-12 | This sets the encoding, the names for the following encodings are from here. 0 = PCM8 and DSPADPCM, 1 = PCM16, 2 = IMAADPCM. |
15-14 | ? |
31-16 | Sample rate clamped to the following range(by the user process): 0x42-0xFFFF. This is the same value used with Cmd 0x8, except clamped. |
Parameter word 0xC
Bit | Description |
---|---|
15-0 | Unknown, this value is clamped to the following range(by the user process): 0x0-0x8000. |
31-16 | Unknown, this value is clamped to the following range(by the user process): 0x0-0x8000. |
Parameter word 0x10
Bit | Description |
---|---|
15-0 | Unknown, this value is clamped to the following range(by the user process): 0x0-0x8000. |
31-16 | Unknown, this value is clamped to the following range(by the user process): 0x0-0x8000. |
Command 0x300
Index Byte | Size | Description |
---|---|---|
0x2 | 2 | CmdID 0x300 |
0x8 | 0x18 | Unused, all-zero. |
CSND module writes state info(including state from CSND registers) for each audio channel to shared-memory for this command.