CRI ADX  Last Updated: 2024-03-21 14:32 p
ボイスプライオリティ

サンプルのディレクトリ

/cri/pc/samples/criatomex/control_priority

サンプルで使用しているデータ

/cri/common/smpdata/criatomex/
  • music_tr.adx
  • music_loop.adx

サンプルの解説

CRI Atomでは、実際の発音処理を行うボイスと、再生制御を行うプレーヤーが独立しているため、 ボイスが少ない状態で複数プレーヤーで再生処理を行うと、プレーヤー間でのボイスの奪い合いが発生します。


  • プライオリティの設定
    ボイスが足りない場合に、どのプレーヤーを優先するかを設定するには criAtomExPlayer_SetVoicePriority 関数を使います。

  • 発音制御方式(先着優先/後着優先)の設定
    同じ優先度の場合、先に再生しているプレーヤーを優先するか、後から再生を開始したプレーヤーを優先するかを、 criAtomExPlayer_SetVoiceControlMethod 関数で設定します。
#define SMP_PATH_LENGTH (256)
CriAtomExPlayerConfig player_config;
/* ボイスを取り合うように少ない数に指定 */
pool_config.num_voices = 1;
/* ストリーミング再生指定 */
pool_config.player_config.streaming_flag = CRI_TRUE;
/* ボイスプールの作成 */
voice_pool = criAtomExVoicePool_AllocateAdxVoicePool(&pool_config, NULL, 0);
/* パス保存に必要なサイズを指定 */
player_config.max_path = SMP_PATH_LENGTH;
/* プレーヤーの作成 */
player[0] = criAtomExPlayer_Create(&player_config, NULL, 0);
player[1] = criAtomExPlayer_Create(&player_config, NULL, 0);
/* 再生するファイルをプレーヤーに設定 */
criAtomExPlayer_SetFile(player[0], NULL, PATH FILE1);
criAtomExPlayer_SetFile(player[1], NULL, PATH FILE2);
/* プライオリティを設定 */
criAtomExPlayer_SetVoicePriority(player[0], 1); /* 優先度が相対的に高い */
criAtomExPlayer_SetVoicePriority(player[1], 0); /* 優先度が相対的に低い */
/* 先着優先設定(後から再生した同じ優先度のプレーヤーはボイスを確保できない) */
/* 情報の更新 */
/* 再生開始 */
void criAtomExPlayer_SetFile(CriAtomExPlayerHn player, CriFsBinderHn binder, const CriChar8 *path)
音声データのセット(ファイル名の指定)
CriAtomExPlaybackId criAtomExPlayer_Start(CriAtomExPlayerHn player)
再生の開始
void criAtomExPlayer_SetVoiceControlMethod(CriAtomExPlayerHn player, CriAtomExVoiceControlMethod method)
ボイス制御方法の指定
CriAtomExPlayerObj * CriAtomExPlayerHn
プレーヤーハンドル
Definition: cri_atom_ex.h:3656
void criAtomExPlayer_UpdateAll(CriAtomExPlayerHn player)
再生パラメーターの更新(再生中の音全て)
CriAtomExPlayerHn criAtomExPlayer_Create(const CriAtomExPlayerConfig *config, void *work, CriSint32 work_size)
AtomExPlayerの作成
void criAtomExPlayer_SetVoicePriority(CriAtomExPlayerHn player, CriSint32 priority)
ボイスプライオリティの設定
#define criAtomExPlayer_SetDefaultConfig(p_config)
プレーヤー作成用コンフィグ構造体にデフォルト値をセット
Definition: cri_atom_ex.h:713
@ CRIATOMEX_PREFER_FIRST
Definition: cri_atom_ex.h:3719
#define criAtomExVoicePool_SetDefaultConfigForAdxVoicePool(p_config)
ADXボイスプール作成用コンフィグ構造体にデフォルト値をセット
Definition: cri_atom_ex.h:585
CriAtomExVoicePoolHn criAtomExVoicePool_AllocateAdxVoicePool(const CriAtomExAdxVoicePoolConfig *config, void *work, CriSint32 work_size)
ADXボイスプールの作成
CriBool streaming_flag
ストリーミング再生を行うかどうか
Definition: cri_atom.h:1729
ADXボイスプール作成用コンフィグ構造体
Definition: cri_atom_ex.h:3311
CriSint32 num_voices
Definition: cri_atom_ex.h:3313
CriAtomAdxPlayerConfig player_config
Definition: cri_atom_ex.h:3314
プレーヤー作成用コンフィグ構造体
Definition: cri_atom_ex.h:3518
CriSint32 max_path
最大パス長
Definition: cri_atom_ex.h:3599


上記のコードの例では、player[1]を先に再生しておき、後からplayer[0]の再生を開始すると、 ボイスが1つしかなく、player[0]の優先度が高いため、player[1]は再生を停止し、 player[0]が再生を開始します。


同じ優先度だった場合は先着優先なので、player[1]の再生は継続し、 player[0]は再生を開始せずにそのまま再生終了状態になります。


キュー再生時のプライオリティについては、ツール側で設定したプライオリティが適用されるため、 アプリケーション側で操作する必要はありません。(現在、操作できないようになっています。)