# NNSSndArcStrmCallback

## 構文

      #include <nnsys/snd.h>

      typedef struct NNSSndArcStrmCallbackInfo
      {
          int playerNo;
          int strmNo;
      } NNSSndArcStrmCallbackInfo;

      typedef struct NNSSndArcStrmCallbackParam
      {
          int strmNo;
          u32 offset;
      } NNSSndArcStrmCallbackParam;

      typedef BOOL (*NNSSndArcStrmCallback)(
              NNSSndArcStrmCallbackStatus status,
              const NNSSndArcStrmCallbackInfo* info,
              NNSSndArcStrmCallbackParam* param,
              void* arg );

## 引数

`status` | コールバックの状態です。
`info` | コールバック情報構造体のポインタです。
`param` | コールバックパラメータ構造体のポインタです。
`arg` | ユーザー引数です。

## 返り値

返り値の意味は、コールバックの状態`status`によって、異なります。 デフォルトの処理を行うためには、FALSEを返します。 個々の`status`毎の説明は、下記を参照してください。

## 説明

ストリーム再生中に、特定のタイミングで呼びだされるコールバック関数です。

このコールバック関数は、 `NNS_SndArcStrmStartEx2`関数、 `NNS_SndArcStrmPrepareEx2`関数 で登録されます。

コールバック関数は、特定のタイミングで呼びだされます。 どのタイミングで呼びだされたかは、 コールバックの状態`status`で判定できます。 コールバックの状態`status`は次の値を取ります。

表 . NNSSndArcStrmCallbackStatus

ラベル | 説明
--- | ---
NNS_SND_ARC_STRM_CALLBACK_DATA_END | ループ無しストリームのデータ供給がデータ終端に達した状態です。

コールバック情報構造体`info`は、 コールバックの付加情報が格納された構造体です。 構造体のメンバの意味は、次の通りです。

表 . NNSSndArcStrmCallbackInfo

メンバ | 説明
--- | ---
playerNo | 現在再生に使用してるストリームプレイヤーの番号です。
strmNo | 現在再生しているストリームの番号です。

コールバックパラメータ構造体`param`の設定及び、関数の返り値の意味は、 コールバックの状態`status`毎に異なります。 個々の`status`毎の処理は、以下の説明を参照してください。

### 注意

将来、コールバックの状態statusの種類が増える可能性があります。 必ず、statusの値をチェックして、 無視する場合は、FALSEを返してください。

## status毎の処理

### NNS_SND_ARC_STRM_CALLBACK_DATA_END

コールバックパラメータ構造体`param`のメンバ `strmNo`に次に再生するストリームデータのストリーム番号を入れて TRUEを返すと、指定したストリームデータを続けて再生します。 この時、コールバックパラメータ構造体`param`のメンバ`offset`に msec単位の再生開始オフセット位置を指定できます。

FALSEを返すと、データ供給を停止し、残りのバッファ再生後にストリームは停止します。

続けて再生する場合、前のストリームのデータフォーマットと、次に再生するデータのフォーマットが、 次の条件を全て満たしていなければ、継続再生に失敗します。

- サンプリングレートが等しい。
- サンプルフォーマットが共に８ビットPCMか、共に８ビットPCMでない。

## 参照

NNS_SndArcStrmStartEx2, NNS_SndArcStrmPrepareEx2

## 履歴

2004/11/26 初版