#include <nitro/snd.h>
void SND_SetupChannelPcm( int chNo, SNDWaveFormat format, const void* dataAddr, SNDChannelLoop loop, int loopStart, int loopLen, int volume, SNDChannelDataShift shift, int timer, int pan );
chNo | Channel number. Takes a value between 0 and 15. |
format | Format of the waveform data. |
dataAddr | Starting address of the waveform data. Must have 4-byte alignment. |
loop | Loop playback setting. |
loopStart | Loop-start position. Expressed in units of words. Takes a value of 0 to 0xffff . |
loopLen | Length of the loop. Expressed in units of words. Takes a value of 0 to 0x3fffff . |
volume | Volume. Takes a value between 0 and 127. |
shift | Data shift setting. |
timer | Timer. Takes a value between 0x10 and 0xffff. |
pan | Pan. Takes values in the range of 0 (left) to 64 (center) to 127 (right). |
Sets up channels for PCM playback.
The function sets the parameters for the channel specified by chNo. The channel must first be locked by the SND_LockChannel
function. Once the parameters have been set, call the SND_StartTimer
function to begin actual playback.
Choose from among these values for the waveform data format format.
Table. SNDWaveFormat
Label | Description |
---|---|
SND_WAVE_FORMAT_PCM8 |
8-bit PCM |
SND_WAVE_FORMAT_PCM16 |
16-bit PCM |
SND_WAVE_FORMAT_ADPCM |
IMA-ADPCM |
The waveform data's starting address dataAddr must have 4-byte alignment.
Choose from among these values for the loop playback setting loop.
Table. SNDChannelLoop
Label | Description |
---|---|
SND_CHANNEL_LOOP_MANUAL |
Continues playing, regardless of the loop setting. |
SND_CHANNEL_LOOP_REPEAT |
When playback has reached the end of the loop (loopStart + loopLen), continues playing from the start of the loop at loopStart. |
SND_CHANNEL_LOOP_1SHOT |
When playback has reached the end of the loop (loopStart + loopLen), playback stops automatically. |
The loop starting position loopStart and the loop length loopLen are specified in word units. The value is ignored when the loop playback setting loop is set to SND_CHANNEL_LOOP_MANUAL
.
Choose from among these values for the data shift setting shift.
Table. SNDChannelDataShift
Label | Description |
---|---|
SND_CHANNEL_DATASHIFT_NONE |
Do not perform a data shift. |
SND_CHANNEL_DATASHIFT_1BIT |
Shift data 1 bit right. |
SND_CHANNEL_DATASHIFT_2BIT |
Shift data 2 bits right. |
SND_CHANNEL_DATASHIFT_4BIT |
Shift data 4 bits right. |
The timer argument specifies the number of clock ticks for outputting one sample. The number of ticks per second is approximately 16.757 MHz with SND_TIMER_CLOCK
. Thus, if you want to play the waveform data without changing the pitch, and the sampling rate is rate Hz, then you calculate timer as follows.
timer = SND_TIMER_CLOCK
/ rate
This function is an ARM7 reserved function. After this function is called, its processing occurs only after the command is issued with the SND_FlushCommand
function.
If program execution must be synchronized with process completion, first use the SND_GetCurrentCommandTag
function to get the command tag immediately after calling this function. Then, after the command is issued, use the command tag and call the SND_IsFinishedCommandTag
or SND_WaitForCommandProc
function to confirm that processing has finished or to wait for it to complete.
SND_LockChannel
SND_StartTimer
SND_FlushCommand
SND_GetCurrentCommandTag
SND_IsFinishedCommandTag
SND_WaitForCommandProc
2008/11/19 Corrected mistaken explanation of loop length as data length.
2005/02/17 Added precaution about ARM7 command processing.
2004/10/07 Corrected SND_CHANNEL_LOOP_REPAET
to read SND_CHANNEL_LOOP_REPEAT
.
2004/07/20 Initial version.
CONFIDENTIAL