NNSSndStrmCallback

構文

#include <nnsys/snd.h>
typedef void (*NNSSndStrmCallback)(
        NNSSndStrmCallbackStatus status,
        int numChannles,
        void* buffer[],
        u32 len,
        NNSSndStrmFormat format,
        void* arg );

引数

status コールバックの状態です。
numChannles チャンネル数です。
buffer 各チャンネル毎のバッファの先頭アドレスの配列です。
len 各チャンネル毎のバッファのバイト長です。
format サンプルデータフォーマットです。
arg ユーザー引数です。

返り値

なし。

説明

ストリーム再生時に、波形データの補充が必要になったとき呼びだされるコールバック関数です。

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

NNS_SndStrmSetup関数で登録したコールバック関数は、 渡されたバッファに対して、波形データを供給する義務があります。 NNS_SndArcStrmStartEx2関数または、 NNS_SndArcStrmPrepareEx2関数で登録したコールバック関数は、 サウンドアーカイブストリームライブラリによって、波形データが供給された後、呼びだされますので、 波形データ供給の義務はありません。 ただし、波形データを加工することは可能です。

コールバック関数は、2種類のタイミングで呼びだされます。 1つは、ストリーム再生を始める前に、あらかじめストリームバッファ全体に波形データを満たしておく必要があるために 呼びだされます。この時、コールバックの状態statusに、 NNS_SND_STRM_CALLBACK_SETUPが渡されます。 もう1つのコールバック呼び出しのタイミングは、ストリーム再生中に呼びだされるものです。 これは、再生によって消費されたバッファに、続きの波形データを補充する必要があるために呼びだされます。 この時は、コールバックの状態statusに、 NNS_SND_STRM_CALLBACK_INTERVALが渡されます。

チャンネル数numChannlesには、ストリーム再生のために使用している チャンネル数が渡されます。 バッファの先頭アドレスの配列bufferの要素数は、 numChannles個になります。 各チャンネル毎のバッファサイズは、lenバイトです。

サンプルデータフォーマットformatは、下記の値のいずれかです。

表 . NNSSndStrmFormat

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

注意

波形データを補充(加工)した後は、メインメモリに確実に書き込まれるように、 DC_FlushRange関数などを呼びだすようにしてください。

NNS_SndStrmSetup関数で登録したコールバック関数は、割り込み禁止状態で呼びだされることに注意してください。 一方、NNS_SndArcStrmStartEx2関数または、 NNS_SndArcStrmPrepareEx2関数 で登録したコールバック関数は、ストリームスレッドから呼びだされることに注意してください。

必ずしもコールバック関数で、波形データの補充を完了させる必要はありませんが、 次にその領域が再生されるまでに補充を完了しないと、 正常な音声が出力されなくなります。

参照

NNS_SndStrmSetup, NNS_SndArcStrmStartEx2, NNS_SndArcStrmPrepareEx2

履歴

2004/11/26 NNS_SndStrmSetup関数の説明から分離