# 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ビットの時と比べて２倍の頻度でコールバック関数が呼びだされます。 8ビットの時と同じ頻度で呼びだされるようにするためには、 ストリームバッファを２倍のサイズ用意する必要があります。

表 . NNSSndStrmFormat

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

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

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

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

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

## 参照

NNS_SndStrmAllocChannel, NNS_SndStrmStart, NNSSndStrmCallback

## 履歴

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