CRI Sofdec  Last Updated: 2024-01-10 18:57 p
動画内音声の高度な制御
CriManaPlayerHnの作成時にコンフィグでuse_atomex_playerをCRI_TRUEにすることで、 CriManaPlayerHn 作成時にManaライブラリの CriManaPlayer_CreateWithConfig 関数内部で CriAtomExPlayerHn を作成し、それをサウンド再生オブジェクトとして使用するようになります。 (デフォルトではCriAtomExPlayerHnより下位レイヤーの内部音声モジュールを使用します)
サウンド再生オブジェクトとして CriAtomExPlayerHn を使用するよう変更した場合、criManaPlayer_GetAtomExPlayerByTrackId 関数で CriManaPlayerHn 内の CriAtomExPlayerHn を取得することができます。 取得処理コード例は以下のようになります。
CriManaPlayerHn mana_player;
CriAtomExPlayerHn atomex_player;
config.use_atomex_player = CRI_TRUE;
mana_player = criManaPlayer_CreateWithConfig(&config, NULL, 0);
atomex_player = criManaPlayer_GetAtomExPlayerByTrackId(player, 0);
CriManaPlayerHn criManaPlayer_CreateWithConfig(const CriManaPlayerConfig *config, void *work, CriSint32 work_size)
Manaプレーヤーの作成(コンフィグ指定つき)
CriAtomExPlayerHn criManaPlayer_GetAtomExPlayerByTrackId(CriManaPlayerHn player, CriUint32 track_id)
AtomExPlayerHn の取得
#define criManaPlayer_SetDefaultHandleConfig(p_config)
プレーヤー作成用コンフィグ構造体にデフォルト値をセット
Definition: cri_mana.h:189
CriManaPlayerObj * CriManaPlayerHn
プレーヤーハンドル
Definition: cri_mana.h:802
プレーヤー作成用コンフィグ構造体
Definition: cri_mana.h:739
CriBool use_atomex_player
サウンド再生に criAtomExPlayer を使用するためのフラグです
Definition: cri_mana.h:765


このCriAtomExPlayerHnに対してADXのAPIを呼び出す事により、動画の音声について細かいエフェクトや設定を行うことが可能となります。
【注意】
上記のAPIで取得した CriAtomExPlayerHn に対して Pause、Stop、Destroy等の再生制御 API を呼ばないでください。
管理しているCriManaPlayerからの再生制御と競合して、誤った動作を引き起こす可能性があります。
下記にいくつかの設定例について記載します。

3Dマルチポジショニングの設定

CriAtomExPlayer に対して以下のAPIを使用して動画の音声について3Dマルチポジショニングによる再生が可能となります。
  • criAtomExPlayer_Set3dListenerHn 関数による CriAtomEx3dListener の登録
  • criAtomExPlayer_Set3dSourceHn 関数による CriAtomEx3dSource の登録
上記APIで設定した3Dリスナーハンドル、3D音源ハンドルを参照して再生を行います。
CriManaPlayer_Destroy の前には以下のようにクリア処理を行って参照を無効にしてください。
  • criAtomExPlayer_Set3dListenerHn(player, CRI_NULL);
  • criAtomExPlayer_Set3dSourceHn(player, CRI_NULL);

複数オーディオデバイスの設定

ADXで複数のサウンドデバイス(スピーカー、イヤホンなど)ごとに音声出力をサポートしている機種の場合、SofdecのCriManaPlayerHnのトラック毎(メイン、サブオーディオ、エクストラ)の音声出力についてそれぞれ異なるサウンドデバイスから再生する事が可能です。
はじめにサウンドデバイス毎に設定をしたサウンドミキサーとなるASR(Atom Sound Renderer)ラックの作成、ASRラックIDを以下のAPIを使用して取得する必要があります。
  • criAtomExAsrRack_SetDefaultConfig
  • criAtomExAsrRack_Create
  • criAtomExPlayer_SetAsrRackId
【補足】
  • 上記API、サウンドデバイスなどについては機種毎のADXマニュアルをご参考ください。
  • criAtomExPlayer_SetAsrRackIdArray 関数による複数のASRラックIDの指定には非対応です。
次にSofdecのトラック毎に取得したCriAtomExPlayerHnへASRラックIDの設定を行います。 例えば、3つのサウンドデバイスがあり、出力先ASRラックIDが割り当てられているとします。 CriManaPlayerHnのトラック毎にCriAtomExPlayerを取得し、ASRラックIDを設定することでそれぞれのサウンドデバイスから音声出力が可能となります。
処理コード例は以下のようになります。
CriManaPlayerHn mana_player;
CriAtomExPlayerHn atomex_player
CriAtomExPlayerHn atomex_player_sub
CriAtomExPlayerHn atomex_player_extra
CriAtomExAsrRackId asr_rack_id[MAX_DEVICES];
/* デバイスごとに割り当てるハードウェアサウンドレンダラの種別 */
static const CriAtomSoundRendererType sound_renderer_table[MAX_DEVICES] = {
CRIATOM_SOUND_RENDERER_HW1,
CRIATOM_SOUND_RENDERER_HW2,
CRIATOM_SOUND_RENDERER_HW3,
CRIATOM_SOUND_RENDERER_HW4
};
/* プライマリデバイスのASRラックIDを保存 */
asr_rack_id[0] = CRIATOMEXASR_RACK_DEFAULT_ID;
/* 追加デバイス用にASRラックを作成(CRIATOM_SOUND_RENDERER_HW2~4を使用) */
for (int i = 1; i < MAX_DEVICES; i++) {
criAtomExAsrRack_SetDefaultConfig(&asr_rack_config);
asr_rack_config.sound_renderer_type = sound_renderer_table[i];
asr_rack_id[i] = criAtomExAsrRack_Create(&asr_rack_config, NULL, 0);
}
/* AtomExPlayerHn の取得 (メインオーディオトラックID:0) */
atomex_player = criManaPlayer_GetAtomExPlayerByTrackId(mana_player, 0);
/* AtomExPlayerHn の取得 (サブオーディオトラックID:1) */
atomex_player_sub = criManaPlayer_GetAtomExPlayerByTrackId(mana_player, 1);
/* AtomExPlayerHn の取得 (エクストラオーディオトラックID:2) */
atomex_player_sub = criManaPlayer_GetAtomExPlayerByTrackId(mana_player, 2);
/* ASRラックIDの指定、デバイスID:0を設定 */
criAtomExPlayer_SetAsrRackId(atomex_player, asr_rack_id[0]);
/* ASRラックIDの指定、デバイスID:1を設定 */
criAtomExPlayer_SetAsrRackId(atomex_player_sub, asr_rack_id[1]);
/* ASRラックIDの指定、デバイスID:2を設定 */
criAtomExPlayer_SetAsrRackId(atomex_player_sub, asr_rack_id[2]);