#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 |
チャンネル番号です。値の範囲は、0〜15です。 |
format |
波形データのフォーマットです。 |
dataAddr |
波形データの先頭アドレスです。4バイトアライメントされている必要があります。 |
loop |
ループ再生設定です。 |
loopStart |
ループ開始位置です。ワード単位で、値の範囲は、0〜0xffffです。 |
loopLen |
ループ長です。ワード単位で、値の範囲は、0〜0x3fffffです。 |
volume |
ボリューム値です。値の範囲は、0〜127です。 |
shift |
データシフト設定です。 |
timer |
タイマー値です。値の範囲は、0x10〜0xffffです。 |
pan |
パン値です。値の範囲は、0(左)〜64(中央)〜127(右)です。 |
PCM再生用にチャンネルをセットアップします。
チャンネル番号chNoのチャンネルのパラメータを設定します。
あらかじめ、SND_LockChannel() で、
チャンネルをロックしておく必要があります。
パラメータ設定後、実際に再生を開始するためには、
SND_StartTimer() を呼びだします。
波形データのフォーマットformatは、下記の値から選択します。
表 . SNDWaveFormat
| ラベル | 説明 |
|---|---|
| SND_WAVE_FORMAT_PCM8 | 8ビットPCM |
| SND_WAVE_FORMAT_PCM16 | 16ビットPCM |
| SND_WAVE_FORMAT_ADPCM | IMA-ADPCM |
波形データの先頭アドレスdataAddrは、4バイトアライメントされている必要があります。
ループ再生設定loopは、以下の値から選択します。
表 . SNDChannelLoop
| ラベル | 説明 |
|---|---|
| SND_CHANNEL_LOOP_MANUAL | ループの設定と無関係に、再生し続けます。 |
| SND_CHANNEL_LOOP_REPEAT | ループ終端loopStart + loopLenまで再生すると、
ループ開始位置loopStartの位置から続けて再生します。 |
| SND_CHANNEL_LOOP_1SHOT | ループ終端loopStart + loopLenまで再生すると、
再生が自動的に停止します。 |
ループ開始位置loopStart 及びループ長loopLenは、
波形データのサイズをワード単位で指定します。
ループ再生設定loopがSND_CHANNEL_LOOP_MANUALの時、
値は無視されます。
データシフト設定shiftは、以下の値から選択します。
表 . SNDChannelDataShift
| ラベル | 説明 |
|---|---|
| SND_CHANNEL_DATASHIFT_NONE | データシフトを行いません。 |
| SND_CHANNEL_DATASHIFT_1BIT | 1ビット右シフトします。 |
| SND_CHANNEL_DATASHIFT_2BIT | 2ビット右シフトします。 |
| SND_CHANNEL_DATASHIFT_4BIT | 4ビット右シフトします。 |
タイマーtimerは、1サンプルを出力するクロック数を指定します。
1秒あたりのクロック数は、SND_TIMER_CLOCKで、約16.757MHz です。
例えば、サンプリングレートがrate[Hz]の波形データを、そのままの音程で再生する場合は、
timer= SND_TIMER_CLOCK /rate
のように計算します。
この関数は、ARM7コマンド予約関数です。 この関数を呼びだした後、 SND_FlushCommand() で コマンドを発行して始めて、処理が行われます。
また、処理の完了と同期を取る必要がある場合は、 まず、この関数呼び出しの直後に、 SND_GetCurrentCommandTag() で、コマンドタグを取得しておきます。 そしてコマンド発行後に、取得したコマンドタグを使って SND_IsFinishedCommandTag() または、 SND_WaitForCommandProc() を呼びだして、 処理の完了をチェックしたり、待ったりします。
SND_LockChannel, SND_StartTimer, SND_FlushCommand, SND_GetCurrentCommandTag, SND_IsFinishedCommandTag, SND_WaitForCommandProc
2008/11/19 「ループ長」を「データ長」として説明していた誤りを修正
2005/02/17 ARM7コマンド処理の注意書き追加
2004/10/07 SND_CHANNEL_LOOP_REPAET を SND_CHANNEL_LOOP_REPEAT に修正
2004/07/20 初版