- 本セクションでは、CRI Atomライブラリの初期化処理と終了処理について説明します。
ライブラリ初期化時のメモリ割り当てについては ワークメモリについて を参照してください。
初期化関連の実装例についてはクイックスタートの (3) ライブラリ初期化 も併せて参照してください。
初期化処理と終了処理
- ADX2の各種機能を使用する前にはCRI Atomライブラリの初期化が必要です。
CRI Atomライブラリの初期化時には、動作モードを指定したり、メモリ使用量を節約するための各種パラメータ指定が可能です。
- ADX2 LEライブラリの初期化と終了は、機種ごとに専用の関数があります。
以降のサンプルコードはPC版で説明を行っていますが、iOS/Android/Macの場合は関数名や構造体名の「_WASAPI」を各機種のシンボルに置き換えて読んでください。
初期化パラメータの省略
- ライブラリ初期化の引数はNULL指定で省略する事も可能です。省略した場合は標準的な設定でライブラリは動作します。
main()
{
:
criAtomEx_Initialize_WASAPI(NULL, NULL, 0);
:
}
- コンフィグ構造体を省略した場合、CRI Atomライブラリは以下の設定でライブラリの初期化を行います。
- フレームワークをマルチスレッドモデルに設定
- サーバ処理の実行頻度を60Hzに設定
- 最大バーチャルボイス数を16に設定
- CRI File Systemライブラリをデフォルト設定で初期化
初期化パラメータの変更
- ライブラリ初期化パラメータを指定する場合は、必ず初期値設定関数で構造体を初期化してから必要なパラメータを変更してください。
CriAtomExConfig_WASAPI libconfig;
criAtomEx_SetDefaultConfig_WASAPI(&libconfig);
libconfig.atom_ex.thread_model = ....;
libconfig.atom_ex.max_virtual_voices = ....;
criAtomEx_Initialize_WASAPI(&libconfig, NULL, 0);
- CRI Atomライブラリ初期化と終了はアプリケーション全体でそれぞれ一度だけ行うのが基本的な実装です。
もし「初期化」→「初期化」のように多重に呼び出した場合は、2回目の初期化処理は無視されます。
初期化パラメータを変更したい場合は、いったんライブラリを終了してから初期化しなおしてください。
- なお、エラーコールバックの登録やメモリアロケータの登録など、CRI Atomライブラリの初期化よりも先に呼び出す関数も例外的に存在します。
ライブラリの初期化パラメータ
- ライブラリ初期化パラメータ構造体には多くの設定内容が入っていますが、通常のアプリケーションで設定を変更する必要はほとんどありません。
ここではパラメータのなかでアプリケーションに主に関係しそうなものをいくつか紹介します。
各構造体の詳細については関数リファレンスを参照してください。
スレッドモデル(thread_model)について
- CRI Atomライブラリは、初期化時に指定された仕様に基づき、スレッドフレームワークを構築します。
スレッドフレームワークの詳細については「 スレッドについて 」をご参照ください。
サーバ処理の実行頻度(server_frequency)について
- CRI Atomライブラリは、ファイル読み込みの管理や、音声データのデコード、音声の出力、 ステータスの更新等、ライブラリ内部で行う処理のほとんどを1つの関数でまとめて行います。
CRIミドルウェアでは、こういったライブラリ内の処理を一括して行う関数のことを「サーバ処理」と呼んでいます。
- 音声を途切れなく再生するため、CRI Atomライブラリはサーバ処理をスレッド上で一定間隔で定期的に実行しています。
その際、CRI Atomライブラリはサーバ処理をserver_frequencyで指定された頻度で実行します。
- サーバ処理の実行頻度を多くすると、単位サーバ処理当たりの処理量(デコード量等)が少なくなります。
その結果、単位サーバ当たりの処理負荷は小さくなります(負荷が分散されます)が、 サーバ処理の実行に伴うオーバーヘッドは大きくなります。
(携帯ゲーム機等、CPUリソースが少ない環境でサーバ処理の実行頻度を多くしすぎた場合、 サーバ処理の実行に伴うオーバーヘッドが無視できなくなる可能性があります。)
- サーバ処理の実行頻度を少なくすると、単位サーバ処理当たりの処理量が多くなります。
サーバ処理の実行に伴うオーバーヘッドは低減されますが、単位サーバ処理当たりの負荷が高くなるため、フレーム落ち等の問題が発生する恐れがあります。
- [備考]
通常、server_frequencyにはアプリケーションのフレームレートと同じ値を指定します。
最大バーチャルボイス数(max_virtual_voices)について
- アプリケーション中で同時に使用する「バーチャルボイス」の数を指定します。
バーチャルボイスは、ボイスを制御するためのインターフェースを提供する、仮想的なボイスオブジェクトです。
(ボイスと異なり、バーチャルボイス自身は発音用のリソースを持ちません。)
AtomExプレーヤに対して音声データの再生を指示すると、Atomライブラリはバーチャルボイスを確保し、バーチャルボイスに対して発音リクエストを行います。
バーチャルボイスは、発音リクエストに応じて必要なボイスをボイスプールから確保し、発音を行おうとします。
この際、ボイスが確保できた場合は発音処理が行われますが、ボイスが確保できなかった場合には発音処理が行われません。
(バーチャルボイス数分の音声が必ず発音されるとは限りません。)
ハードウェアボイスと異なり、バーチャルボイスはライブラリ内でメモリが許す限り作成が可能です。
そのため、発音可能な音声の数がハードウェア的に制限された環境であっても、一時的に発音上限数を超える数の音声を制御することが可能になります。
- アプリケーション中で使用するボイスの数は、ボイスプール作成時に決定されますが、バーチャルボイスの数はライブラリ初期化時に指定します。
バーチャルボイス数を多くすることで、同時にコントロール可能な音声の数は増えますが、必要なメモリは多くなります。
- [備考]
通常、バーチャルボイスはボイス数(最大同時発音数)と同じにしておけば問題はありません。
最大ボイスリミットグループ数(max_voice_limit_groups)について
- アプリケーション中で同時に使用する「ボイスリミットグループ」の数を指定します。
- ボイスリミットグループは、ボイスの同時発音数を制御するための仕組みです。
同一グループに所属する音声については、ボイスリミットグループで定められた数以上のボイスが割り当てられません。
再生する音声をあらかじめボイスリミットグループに所属させ、発音数上限を設定しておくことで、プレーヤに対して大量の発音リクエストが行われた場合でも特定の音声にボイスが占有される事態が発生しなくなります。
CRI File Systemライブラリの初期化パラメータ(fs_config)について
- CRI Atomライブラリは、ファイルの読み込みにCRI File Systemライブラリを使用します。
そのため、::criAtomEx_Initialize_WASAPI 関数を実行した場合、関数内でCRI File Systemライブラリの初期化が行われます。
- CRI File Systemライブラリの初期化パラメータには、同時オープンする最大ハンドル数などのパラメータがあります。
例えば大量のACBファイルを同時に使用する場合などは、最大ファイルハンドル数が不足するかもしれません。そのような場合は CRI File Systemライブラリの初期化パラメータを変更してください。
- CRI File Systemライブラリの初期化パラメータは、CRI Atomライブラリの初期化構造体からポインタ参照されます。
変更したい場合は CRI File Systemライブラリの初期化パラメータ構造体をアプリケーションで直接定義してください。
CriAtomExConfig_WASAPI libconfig;
CriFsConfig fs_config;
criAtomEx_SetDefaultConfig_WASAPI(&libconfig);
criFs_SetDefaultConfig(&fs_config);
fs_config.max_files = ....;
libconfig.atom_ex.fs_config = &fs_config;
criAtomEx_Initialize_WASAPI(&libconfig, NULL, 0);