ボイスプライオリティ

サンプルのディレクトリ

/cri/pc/samples/criatomex/control_priority

サンプルの解説

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

#define SMP_PATH_LENGTH (256)

CriAtomExAdxVoicePoolConfig pool_config;
CriAtomExPlayerConfig player_config;
CriAtomExPlayerHn player[2];

    criAtomExVoicePool_SetDefaultConfigForAdxVoicePool(&pool_config);
    /* ボイスを取り合うように少ない数に指定 */
    pool_config.num_voices = 1;
    /* ストリーミング再生指定 */
    pool_config.player_config.streaming_flag = CRI_TRUE;
    /* ボイスプールの作成 */
    voice_pool = criAtomExVoicePool_AllocateAdxVoicePool(&pool_config, NULL, 0);

    criAtomExPlayer_SetDefaultConfig(&player_config);
    /* パス保存に必要なサイズを指定 */
    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); /* 優先度が相対的に低い */

    /* 先着優先設定(後から再生した同じ優先度のプレーヤーはボイスを確保できない) */
    criAtomExPlayer_SetVoiceControlMethod(player[0], CRIATOMEX_PREFER_FIRST);
    criAtomExPlayer_SetVoiceControlMethod(player[1], CRIATOMEX_PREFER_FIRST);

    /* 情報の更新 */
    criAtomExPlayer_UpdateAll(player[0]);
    criAtomExPlayer_UpdateAll(player[1]);

    /* 再生開始 */
    criAtomExPlayer_Start(player[0]);
    criAtomExPlayer_Start(player[1]);

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

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

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



CRI Middleware logo Copyright (c) 2006-2018 CRI Middleware Co., Ltd.