SND_SetupChannelPsg

構文

#include <nitro/snd.h>
void SND_SetupChannelPsg(
        int chNo,
        SNDDuty duty,
        int volume,
        SNDChannelDataShift shift,
        int timer,
        int pan );

引数

chNo チャンネル番号です。値の範囲は、8〜13です。
duty デューティ比です。
volume ボリューム値です。値の範囲は、0〜127です。
shift データシフト指定です。
timer タイマー値です。値の範囲は、0x10〜0xffffです。
pan パン値です。値の範囲は、0(左)〜64(中央)〜127(右)です。

返り値

なし。

説明

PSG矩形波再生用にチャンネルをセットアップします。

チャンネル番号chNoのチャンネルのパラメータを設定します。 あらかじめ、SND_LockChannel() で、 チャンネルをロックしておく必要があります。 パラメータ設定後、実際に再生を開始するためには、 SND_StartTimer() を呼びだします。

PSG矩形波のデューティ比dutyは、下記の値から選択します。

表 . SNDDuty

ラベル 説明
SND_DUTY_1_8 1/8 (12.5%) デューティ
SND_DUTY_2_8 2/8 (25.0%) デューティ
SND_DUTY_3_8 3/8 (37.5%) デューティ
SND_DUTY_4_8 4/8 (50.0%) デューティ
SND_DUTY_5_8 5/8 (62.5%) デューティ
SND_DUTY_6_8 6/8 (75.0%) デューティ
SND_DUTY_7_8 7/8 (87.5%) デューティ

データシフト設定shiftは、以下の値から選択します。

表 . SNDChannelDataShift

ラベル 説明
SND_CHANNEL_DATASHIFT_NONE データシフトを行いません。
SND_CHANNEL_DATASHIFT_1BIT 1ビット右シフトします。
SND_CHANNEL_DATASHIFT_2BIT 2ビット右シフトします。
SND_CHANNEL_DATASHIFT_4BIT 4ビット右シフトします。

タイマーtimerは、PSG矩形波の8分周期をクロック数で指定します。 1秒あたりのクロック数は、SND_TIMER_CLOCKで、約16.757MHz です。 例えば、周波数fleq[Hz]の音程で再生する場合は、

timer = SND_TIMER_CLOCK / ( 8 * fleq )

のように計算します。

注意

この関数は、ARM7コマンド予約関数です。 この関数を呼びだした後、 SND_FlushCommand() で コマンドを発行して始めて、処理が行われます。

また、処理の完了と同期を取る必要がある場合は、 まず、この関数呼び出しの直後に、 SND_GetCurrentCommandTag() で、コマンドタグを取得しておきます。 そしてコマンド発行後に、取得したコマンドタグを使って SND_IsFinishedCommandTag() または、 SND_WaitForCommandProc() を呼びだして、 処理の完了をチェックしたり、待ったりします。

参照

SND_LockChannel, SND_StartTimer, SND_FlushCommand, SND_GetCurrentCommandTag, SND_IsFinishedCommandTag, SND_WaitForCommandProc

履歴

2005/02/17 ARM7コマンド処理の注意書き追加
2004/08/10 初版