#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は、下記の値のいずれかです。
波形データを補充(加工)した後は、メインメモリに確実に書き込まれるように、 DC_FlushRange関数などを呼びだすようにしてください。
NNS_SndStrmSetup関数で登録したコールバック関数は、割り込み禁止状態で呼びだされることに注意してください。 一方、NNS_SndArcStrmStartEx2関数または、 NNS_SndArcStrmPrepareEx2関数 で登録したコールバック関数は、ストリームスレッドから呼びだされることに注意してください。
必ずしもコールバック関数で、波形データの補充を完了させる必要はありませんが、 次にその領域が再生されるまでに補充を完了しないと、 正常な音声が出力されなくなります。
NNS_SndStrmSetup, NNS_SndArcStrmStartEx2, NNS_SndArcStrmPrepareEx2
2004/11/26 NNS_SndStrmSetup関数の説明から分離