NNS_SndStrmSetup

構文

#include <nnsys/snd.h>
BOOL NNS_SndStrmSetup(
        NNSSndStrm* stream,
        NNSSndStrmFormat format,
        void* buffer,
        u32 bufSize,
        int timer,
        int interval,
        NNSSndStrmCallback callback,
        void* arg );

引数

stream ストリーム構造体のポインタです。
format ストリームデータフォーマットです。
buffer ストリームバッファの先頭アドレスです。32バイトアライメントされている必要があります。
bufSize ストリームバッファサイズです。interval * (チャンネル数) * 32の倍数で無ければなりません。
timer ストリームチャンネルのタイマー値です。
interval コールバックインターバルです。2以上の値を指定します。
callback ストリームコールバック関数のポインタです。
arg ストリームコールバック関数のユーザー引数です。

返り値

セットアップに成功したかどうかを返します。

説明

ストリームのセットアップを行います。 あらかじめ、NNS_SndStrmAllocChannel関数で、 チャンネルを確保しておく必要があります。 ストリームを再生するためには、この関数の後で NNS_SndStrmStart関数を呼びだします。

ストリームデータフォーマットformatは、下記から選択します。 16ビットの方が音質は良くなりますが、8ビットの時と比べて2倍の頻度でコールバック関数が呼びだされます。 8ビットの時と同じ頻度で呼びだされるようにするためには、 ストリームバッファを2倍のサイズ用意する必要があります。

表 . NNSSndStrmFormat

ラベル 説明
NNS_SND_STRM_FORMAT_PCM8 8ビットPCM
NNS_SND_STRM_FORMAT_PCM16 16ビットPCM

ストリーム再生を行うためには、ストリームバッファが必要になります。 ストリームバッファが小さいほど頻繁にコールバック関数が呼びだされます。 ストリームバッファの先頭アドレスbufferは、 32バイトアライメントされている必要があります。 また、ストリームバッファサイズbufSizeは、 interval * (チャンネル数) * 32の倍数で無ければなりません。 この(チャンネル数)とは、NNS_SndStrmAllocChannel関数で確保したチャンネル数を指します。

ストリームチャンネルのタイマー値timerは、ストリームの再生速度を制御するパラメータです。 値の単位は、1サンプル再生するクロック数です。1秒あたりのクロック数は、 NNS_SND_STRM_TIMER_CLOCKとして定義されています。 例えば、サンプリングレートsampleRateで再生するためには、 NNS_SND_STRM_TIMER_CLOCK / sampleRateをタイマー値として指定します。

コールバックインターバルintervalは、ストリームバッファ全体を再生する間に、 何回コールバック関数が呼びだされるのかを指定します。 例えば、2を指定した場合、バッファの半分を再生中に、残り半分に波形データを書き込むようにします。

コールバック関数callbackは、波形データの補充が必要になったときに呼びだされる関数です。 コールバック関数のユーザー引数argは、 コールバック関数callbackの引数にそのまま渡されます。 コールバック関数については、 NNSSndStrmCallbackの説明を参照してください。

参照

NNS_SndStrmAllocChannel, NNS_SndStrmStart, NNSSndStrmCallback

履歴

2004/11/26 NNSSndStrmCallbackの説明を分離
2004/08/10 初版