[CriAtom]リアルタイムパラメータコントロール

サンプル内容

概要

cri4u_samples_criatom_scene04_game_mini.png

サウンド再生中に、ボリュームやピッチなどの再生パラメータをリアルタイムにコントロールするデモです。

操作方法

画面上のCubeをクリックするとナレーションが始まります。

スライダーを動かすと再生パラメータをコントロールすることができます。
スライダーと再生パラメータは次表のように対応しています。

スライダーと再生パラメータの対応
スライダー 再生パラメータ
Volume Control ボリューム
Pitch Control ピッチ
Bus Send 00 バスセンド0: マスタバス
Bus Send 01 バスセンド1: リバーブ
Bus Send 02 バスセンド2: ピッチシフタ
Bus Send 03 バスセンド3: エコー、サラウンダ
Bus Send 04 バスセンド4: コンプレッサ
Bus Send 05 バスセンド5: コーラス
Bus Send 06 バスセンド6: BiQuadローパスフィルタ
Bus Send 07 バスセンド7: ディストーション

[Reset]ボタンをクリックすると、初期状態に戻すことができます。

シーン情報


ミドルウェア CRI ADX2 (CRI Atom)
サンプル Basicサンプル
格納場所 /cri/unity/samples/UnityProject/Assets/Scenes/criatom/basic/
シーンファイル Scene_04_ControlParameter.unity


プログラムの解説

CRI Atom Craftでサウンドデータをオーサリングする時、キュー、トラック、ウェーブフォームそれぞれに再生パラメータを設定することができます。
スクリプトでキュー再生を行うと、あらかじめキューに設定されている再生パラメータを使って再生することになります。
それだけではなく、再生を開始してから、これらの再生パラメータをリアルタイムに変更しつつ再生することができます。

ボリュームコントロールとピッチコントロールについて

    /* ボリューム */
    private float volumeValue = 1.0f;
    /* ピッチ */
    private float pitchValue = 0.0f;

    /* PitchコントロールGUI */
    GUI.Label (new Rect(20, 18 * (gui_i++), 200, 24), "Pitch Control Value " + this.pitchValue.ToString("0.00"));
    this.pitchValue = GUI.HorizontalSlider(new Rect(20, 18 * (gui_i++), 200, 12), pitchValue, -1200.0f, 1200.0f);

    if (GUI.changed || on_reset == true) {
        CriAtomSource atom_source = gameObject.GetComponent<CriAtomSource>();
        /* Inspector側にパラメータがある場合はInspector側をコントロールする */
        atom_source.volume = volumeValue;
        atom_source.pitch = pitchValue;
    }

DSPバス設定のアタッチについて

DSPバス関連の設定はCRI Atom Craft側で設定してあります。
DSPバスでは主にDSPエフェクト(バス単位でのリバーブやディレイ、ディストーション、ピッチシフトなど)のエフェクト設定になります。

この設定を呼び出すにはAttachDspBusSetting()関数を使用しアタッチしておく必要があります。
このサンプルでは[CRIWARE]オブジェクトのCRIコンポーネントの初期化(ACFロード時)時にDSPバス設定も自動でアタッチしています。

バスセンドレベルについて

バスセンドは、主にDSPエフェクトの効果を有効にする目的で使用します。
バスセンドパラメータはデータとの掛け合わせになるため、データ側があらかじめ1.0(開いた状態)になっている必要があります。
データ側で、センドした先のDSPバスセッティングにて、ルーティングにDSPエフェクトや、最終出力まで繋がっている必要があります。

    /* Bus send 0-7 */
    private float[] busSendlevelValue = new float[maxBus];

    ...

    GUILayout.BeginVertical();
    for (int i = 0; i < maxBus / 2; i++) {
        GUILayout.Label ("[" + i.ToString() + "] " + this.busSendlevelValue[i].ToString("0.00") + busEffectType[i]);
        this.busSendlevelValue[i] = Scene_00_GUI.HorizontalSlider(busSendlevelValue[i], 0.0f, 1.0f);
    }
    GUILayout.EndVertical();
    GUILayout.BeginVertical();
    GUILayout.Space(12);
    GUILayout.EndVertical();
    GUILayout.BeginVertical();
    for (int i =  maxBus / 2; i < maxBus; i++) {
        GUILayout.Label ("[" + i.ToString() + "] " + this.busSendlevelValue[i].ToString("0.00") + busEffectType[i]);
        this.busSendlevelValue[i] = Scene_00_GUI.HorizontalSlider(busSendlevelValue[i], 0.0f, 1.0f);
    }
    GUILayout.EndVertical();

    ...

    /* Update the bus send level. */
    /* A parameter that does not exist on the Inspector side, control it by functions. */
    /* Bus 0 is 1.0f by default, and multiplication is applied. */
    atom_source.SetBusSendLevel(0, this.busSendlevelValue[0]);
    for (int i = 1; i < maxBus; i++) {
        /* Bus 1-7 is 0.0f by default, and addition is applied.(specifying offset) */
        atom_source.SetBusSendLevelOffset(i, this.busSendlevelValue[i]);
    }


CRI Middleware logo Copyright (c) 2012-2018 CRI Middleware Co., Ltd. CRI ADX2 LE マニュアル (for Unity) SDKVer.2.10版