#include <iris_sp/snd/snd.h>
#define SND_CHANNEL_NUM 16 #define SND_CHANNEL_VOLUME_MAX 0x7f #define SND_CHANNEL_TIMER_MIN 0x0010 #define SND_CHANNEL_TIMER_MAX 0xffff #define SND_CHANNEL_PAN_MAX 0x7f
void
SND_SetupChannelPcm
(
u32 chNo,
const SNDWave* wave_p,
const void* data_p,
u32 volume,
u32 timer,
u32 pan| chNo | チャンネル番号です。0 〜 15 の範囲です。チャンネル数16が、SND_CHANNEL_NUM として定義されています。 |
| wave_p | 波形情報構造体のポインタです。メインメモリを指すことはできません。 |
| data_p | 波形データ先頭アドレスです。4バイトアライメントされていなければなりません。メインメモリを指していても構いません。 |
| volume | ボリュームの値です。0 〜 127 の範囲です。値が大きいほど、大きな音量になります。 0が無音で、127がフルレンジです。127は、SND_CHANNEL_VOLUME_MAXとして定義されています。 |
| timer | タイマーオーバーフロー周期の値です。0x0010 〜 0xffff の範囲です。単位はシステムクロックです。 0x0010はSND_CHANNEL_TIMER_MINとして定義されています。0xffffはSND_CHANNEL_TIMER_MAXとして定義されています。 |
| pan | パンの値です。0 〜 127 の範囲です。0 が左、64 が中央、127 が右になります。 127は、SND_CHANNEL_PAN_MAXとして定義されています。 |
なし。
PCM/ADPCM 用にチャンネルを設定します。 あらかじめ、wave_pのメンバに値を設定してから呼び出してください。
再生を開始するには、SND_StartChannel を呼び出します。
再生中のチャンネルに対してこの関数を呼び出すと、再生は停止します。
| フォーマット | 説明 |
|---|---|
| SND_WAVE_FORMAT_PCM8 | 8ビット PCM |
| SND_WAVE_FORMAT_PCM16 | 16ビット PCM |
| SND_WAVE_FORMAT_ADPCM | ADPCM(IMA方式) |
typedef struct SNDWave {
u8 format; // PCMデータフォーマット
u8 loopflag; // ループフラグ 0 or 1
u16 rate; // サンプリングレート
u16 timer; // = SND_CHANNEL_CLOCK / rate
u16 loopstart; // ループ開始ポイント [ワード単位]
u32 looplen; // ループの長さ [ワード単位]
} SNDWave;
ループ無しの場合、loopstartは、任意で構いません。 looplenには、データの長さ[ワード単位]を設定してください。
ADPCM ではヘッダがあるため、loopstartは1ワード分ずれることに注意してください。
rate と timerは関数内では使用していませんので、設定しなくても構いません。
SND_StartChannel, SND_StopChannel, SND_SetupChannelPsg, SND_SetupChannelNoise
2004/01/19 初版