CRI ADX
Last Updated: 2024-11-26 16:51 p
|
音を再生するためには、まずシステムの初期化を行い、再生データをロードする必要があります。 これらはプログラムで行います。
ロードしたデータを再生する場合、プログラムからはプレーヤーにキューをセットし、スタートするといった操作を行います。
スタートしたキューの中で、データ側で作成したシーケンサーが駆動し、 シーケンサーの中にあるウェーブフォームの再生が行われます。
再生すべきデータは既にメモリに乗っているため、Start関数後の初回サーバー処理内で必ず再生が開始されるので遅延がもっとも少ない再生になります。 再生データがメモリに常駐するためメモリを多く消費しますが、再生データはACBファイルにすべて含まれておりメモリの管理もしやすくなっています。 シンプルなゲームでメモリに余裕がある場合にはすべてメモリ再生という選択もあります。 ですが、楽曲、めったに再生されないセリフや長尺のデータはデータ容量を多くとるためストリーム再生をお勧めします。
ストリーム再生は再生データの記録メディアから逐次に読み込み再生を行います。そのため読み込みバッファは必要ですが、波形長さ分のメモリを必要としません。 また、メモリ再生のようにStart関数後の初回サーバー処理内で再生が開始するといった遅延レスな再生開始は行えません。
ストリーム再生の場合、Start関数後の初回サーバ処理内で再生データファイルへのアクセスを開始します。 そのため、再生開始に十分な量の再生データの読み込みが終了するまでの遅延が発生します。
あらかじめ再生するタイミングが分かっている場合は、ポーズ状態で再生開始準備をするというテクニックがあります。 この方法であれば、再生すべきタイミングでは再生開始準備は整った状態なのでResume処理を行えば、メモリ再生とほぼ同等の遅延で済ませることができます。 再生開始準備が整ったかどうかはプレーヤーのステータスで判定することができます。準備完了前にResumeした場合は準備完了と同時に発音が行われます。
デフォルトの状態ではPrepare再生はシーケンスの先頭に配置された波形にしか機能しません。先頭以外の波形にもPrepare処理を適用したい場合は別途後述のシーケンス先読み時間の設定を行ってください。
また、再生開始タイミング前に準備を行う関係上、準備処理開始時に発音に必要なリソースを確保します。このため再生時の自動処理(キューリミット、ボイスリミット)とは相性はよくないテクニックになります。
プレーヤーに対してcriAtomExPlayer_SetSequencePrepareTime関数を設定することで、指定した時間だけシーケンスを先読みをする機能があります。 先読み処理を行うことにより、シーケンスの途中にあるストリーム再生のリクエストであっても、遅延をなくしたり軽減したりすることが可能になります。 ただし、再生時の自動処理(ボイスリミット処理)とは相性はよくないテクニックとなります。
ワンショット音は全てを再生したら自動的に停止しますが、ループ音の場合は停止処理を実行するか、各種リミット処理やアクション等のデータ処理で停止するまで鳴りつづけます。
プレーヤーで再生している音を任意のタイミングで止めるには、プレーヤーに対して停止関数を実行します。
再生開始位置を時刻指定して再生することができます。 指定位置が波形の途中であってもその位置から再生が開始されます。
ブロックシーケンスデータの開始ブロックを指定して再生することができます。 ブロックシーケンスデータは再生中に遷移先ブロックを指定すると、データに設定された遷移タイミングで再生ブロックが切り替わります。
単純な再生に限られますが、ADXやHCA、Wav,AIFFなどファイルやデータのアドレスを指定して再生が可能です。 また、ランタイムでのエンコードや、マイクからの入力など別途提供可能です。