Class CriAtomExPlayer.DataRequestCbFunc
データ要求コールバック関数
Inheritance
Implements
Inherited Members
Namespace: CriWare
Assembly: CriWare.CriAtom.dll
Syntax
public class CriAtomExPlayer.DataRequestCbFunc : NativeCallbackBase<CriAtomExPlayer.DataRequestCbFunc.Arg>, ICallback<CriAtomExPlayer.DataRequestCbFunc.Arg>
Remarks
説明:
説明: 次に再生するデータを指定するためのコールバック関数です。 複数の音声データをシームレスに連結して再生する際に使用します。 コールバック関数の登録には SetDataRequestCallback(delegate* unmanaged[Cdecl]<IntPtr, uint, IntPtr, void>, IntPtr) 関数を使用します。 登録したコールバック関数は、ボイスが内部的に使用している Atom プレーヤーが 連結再生用のデータを要求するタイミングで実行されます。 (前回のデータを読み込み終えて、次に再生すべきデータを要求するタイミングで コールバック関数が実行されます。) コールバック関数内で SetData(IntPtr, int) 関数等を用いて Atom プレーヤーにデータをセットすると、 セットされたデータは現在再生中のデータに続いてシームレスに連結されて再生されます。 また、本関数内で SetPreviousDataAgain() 関数を実行することで、 同一データを繰り返し再生し続けることも可能です。
備考: 本関数内でデータを指定しなかった場合、現在のデータを再生し終えた時点で、 AtomEx プレーヤーのステータスが Playend に遷移します。 タイミング等の問題により、データを指定することができないが、ステータスを Playend に遷移させたくない場合には、コールバック関数内で DeferCallback() 関数を実行してください。 DeferCallback() 関数を実行することで、約1V後に再度データ要求 コールバック関数が呼び出されます。(コールバック処理をリトライ可能。) ただし、 DeferCallback() 関数を実行した場合、再生が途切れる (連結箇所に一定時間無音が入る)可能性があります。
注意: 本コールバックの第 3 引数( player )は、 AtomEx プレーヤーではなく、 下位レイヤの Atom プレーヤーです。 ( AtomExPlayerHn にキャストすると、アクセス違反等の重大な不具合が発生します。) 複数の波形データを含むキューを再生した場合、 最初に見つかった波形データの再生が終了するタイミングでコールバック関数が実行されます。 そのため、複数の波形データを含むキューに対して連結再生の操作を行った場合、 意図しない組み合わせで波形が連結再生される可能性があります。 本機能を使用する際には、 1 つの波形データのみを含むキューを再生するか、 またはファイルやオンメモリデータ等を再生してください。 現状、コールバックは波形データを再生し始めたボイスに対してのみ割り当てられます。 そのため、波形データ再生後にボイスがバーチャル化した場合、コールバックは実行されません。 (データ終端に到達した時点で、コールバックが実行されずにPLAYEND状態に遷移します。) 本コールバック関数内で、シームレス連結再生以外の制御を行わないでください。 コールバック関数はAtomライブラリ内のサーバー処理から実行されます。 そのため、サーバー処理への割り込みを考慮しないAPIを実行した場合、 エラーが発生したり、デッドロックが発生する可能性があります。 コールバック関数内で実行可能なAPIは、以下のとおりです。 - GetWaveformInfoById(int, out WaveformInfo)(引数のnull指定は不可) - GetWaveformInfoByName(ArgString, out WaveformInfo)(引数のnull指定は不可) - GetOnMemoryAwbHandle() - GetStreamingAwbHandle() - SetData(IntPtr, int) - SetFile(CriFsBinder, ArgString) - SetContentId(CriFsBinder, int) - SetWaveId(CriAtomAwb, int) - SetPreviousDataAgain() - DeferCallback() 本コールバック関数内で長時間処理をブロックすると、音切れ等の問題が発生しますので、 ご注意ください。