Audio Modulation プラグインにより、 コンポーネント システムや ブループリント システムの音量やピッチなどのオーディオ パラメータを動的に細かく制御することができます。
Audio Modulation プラグインはデフォルトでは無効になっています。 有効にするには、次の手順を実行します。
[Edit (編集)] > [Plugins (プラグイン)] を選択して、[Plugins (プラグイン)] パネルを開きます。
検索バーを使用して、プラグインを検索します。
該当するチェックボックスをオンにします。
Unreal Editor を再起動します。
アセットのタイプ
Audio Modulation の機能を提供するアセットには、次の 5 つのタイプがあります。
| アセットタイプ | 説明 |
|---|---|
モジュレーション値がどのように正規化され、表示され、他の値とミックスされるかのコンテキストを提供するパラメータ。 | |
モジュレーション パラメーターを参照するコネクタ。 | |
複数のコントロール バス値を一度に適用できるモジュレーター。 | |
複数のコントロール バス値を 1 つの出力値に再マッピングするハイブリッド コネクタモジュレーター。 | |
時間の経過とともに値を生成するハイブリッド コネクタモジュレーターです。 |
これらのアセットを使用すると、エンドポイント モジュレーション デスティネーション にアタッチする前に、モジュレーション パイプラインの基礎を作成できます。
Audio Modulation アセットを作成するには、以下の手順を実行します。
コンテンツ ブラウザ で、[Add (追加)] ボタンをクリックします。
[Audio (オーディオ)] > [Modulation (モジュレーション)] で、必要なアセット タイプを選択します。
モジュレーション パラメータ
モジュレーション パラメータは、モジュレーション値がどのように正規化され、表示され、他の値とミックスされるかのコンテキストを提供します。
各モジュレーション パラメータには、以下の基本プロパティがあります (クラスによってその他のプロパティもあります)。
Default Parameter Value:デフォルトのモジュレーション値。 これは、このパラメータを参照するモジュレーターが他のパラメータとミックスされても入力に変化がないように設定する必要があるバイパス値として機能します。 数学的には、ミックス関数が入力値として設定された際に、恒等関数に効果的に縮小されるように値を選択する必要があります。
Unit Display Name: Unreal Editor のリファレンスで表示する単位。 この情報は、パッケージ ビルドでは削除されるため、開発目的のみに使用されます。
ボリューム ミキシングや周波数操作など、さまざまなユース ケースをサポートする複数のモジュレーション パラメータ クラスが組み込まれています。
Audio Modulation プラグインには、ボリューム、ピッチなど、最も一般的なパラメータ用の Modulation Parameter アセットが含まれています。
これをコンテンツ ブラウザで表示するには、次の手順を実行します。
[Settings (設定)] ボタンをクリックします。
[Show Engine Content (エンジンのコンテンツを表示)] と [Show Plugin Content (プラグイン コンテンツを表示)] を有効にします。
All/Engine/Plugins/Audio Modulation Contentに移動します。
モジュレーション値について
モジュレーション値は、次の 2 つの値空間の間でトランスフォームされます。
Unit (単位):モジュレーション パラメーターに関連付けられている単位で表される値。 たとえば、Volume Modulation パラメータの場合はデシベル (dB)。 単位値は正規化された値にマッピングされます。
Normalized (正規化):均一なパッシングとミキシングを実行するための 0.0 ~ 1.0 の正規化された範囲の値。
複数のモジュレーターが 1 つのモジュレーション デスティネーションにリンクすると、モジュレーション値がミックスされます。 これらの組み合わせ方法は、関連付けられているモジュレーション パラメータに応じて異なります。 以下に、ビルトインのモジュレーション パラメーター タイプのミキシングの処理方法の例を示します。
Volume(ボリューム):ボリュームの低減は加算的に実行されます。 たとえば、2 つのコントロール バスにそれぞれ -6 dB と -12 dB の値が設定されている場合、モジュレーション デスティネーションのボリュームは -18 dB に設定されます。
High-Pass Filter Frequency (ハイパス フィルタの周波数):最大値が選択されます。 たとえば、2 つのコントロール バスにそれぞれ 1000 Hz と 500 Hz の値が設定されている場合、モジュレーション デスティネーションのハイパス フィルター周波数は 1000 Hz に設定されます。
Low-Pass Filter Frequency (ローパス フィルタの周波数):最小値が選択されます。 たとえば、2 つのコントロール バスにそれぞれ 1000 Hz と 500 Hz の値が設定されている場合、モジュレーション デスティネーションのローパス フィルター周波数は 500 Hz に設定されます。
カスタム モジュレーション パラメータ クラスを作成する
独自のモジュレーション パラメータ クラスは、USoundModulationParameter ベース クラスから継承し、以下の関数を実装することで作成できます。
GetMixFunction:入力値と出力値をミックスする関数を返すことが想定されます。
GetUnitConversionFunction:値を単位空間に変換する関数を返すことが想定されます。
GetNormalizedConversionFunction:値を正規化空間に変換する関数を返すことが想定されます。
詳細については、オーディオ モジュレーション C++ API リファレンスを参照してください。
コントロール バス
コントロール バスは、モジュレーション パラメーターを参照するコネクタです。 コントロール バスでは次のことが可能です。
コントロール バス ミックスやモジュレーション ジェネレータが、モジュレーションを行うために使用する。
パラメータ パッチが参照およびリマップする。
通常は、モジュレーションを行いたいサウンドのカテゴリごとにコントロール バスを作成することをお勧めします。 カテゴリには、サウンド エフェクト (CB_SFX) などの一般的なものや、攻撃サウンド (CB_Attacks) などの固有のものがあります。 この例では、剣を振るサウンドのモジュレーション パイプラインに、両方のコントロール バスを設定できます。
コントロール バスのプロパティ
| プロパティ | 説明 |
|---|---|
バイパス | 有効な場合、コントロール バスはパラメータのデフォルト値を、アタッチされているモジュレーション デスティネーションに送信します。 どちらの場合も、コントロール バスはアクティブのままです。 |
パラメータ | 使用するモジュレーション パラメータ。 指定したモジュレーション パラメータのデフォルト値が、このコントロール バスのデフォルト値として使用されます。 |
アドレスをオーバーライド | 有効な場合、アドレス プロパティを変更できます。 |
アドレス | 内部参照名 (一部のブループリント関数で使用されます)。 デフォルトはアセット名ですが、[Override Address (アドレスをオーバーライド)] を有効にすることで変更できます。 |
ジェネレータ | アルゴリズムでバスを制御するモジュレーション ジェネレータの配列。 |
コントロール バス ミックス
コントロール バス ミックス は、以下を行うのに役立つモジュレーターです。
一度に複数のコントロール バス値に影響を与える。
他のコントロール バス ミックスと共有されているコントロール バスでモジュレーションを行う。
ミックス プロファイルを使用して、オーディオをリアルタイムでテストし、微調整する。
コントロール バス ミックスのプロパティ
| プロパティ | 説明 |
|---|---|
ミックスの有効化 | [ボタン] 有効なすべてのワールドにおいて指定のプロファイル インデックスでミックスをアクティブ化します。 |
すべてのミックスを無効化 | [ボタン] アクティブなすべてのワールドで、すべてのミックスを非アクティブ化します。 |
ミックスの無効化 | [ボタン] アクティブなすべてのワールドで、指定されたプロファイル インデックスにあるミックスを非アクティブ化します。 |
プロファイルからミックスをロード | [ボタン] 指定のプロファイル インデックスでミックスをロードします。 これにより、現在ミックスにあるすべての設定が上書きされます。 ミックス プロファイルは |
ミックスをプロファイルに保存 | [ボタン] 指定の プロファイル インデックス にミックスを保存します。 これにより、そのインデックスにある設定がすべて上書きされます。 ミックス プロファイルは、 |
ソロ ミックス | [ボタン] 他のすべてのミックスを非アクティブ化し、すべてのアクティブなワールドにおいて指定のプロファイル インデックスでミックスをアクティブ化します。 エディタ内でのテスト目的専用です。 |
プロファイルインデックス | ミックス プロファイル ボタンの対象となるミックス プロファイルのインデックス (整数)。 各ミックス プロファイルには、アタッチされたモジュレーション デスティネーションがどのようにモジュレーションされるかを決定する Mix Stages の配列があります。 |
ミックス ステージ | コントロール バスの参照と関連付けられているミックス情報の配列。 |
[Mix Stages (ミックス ステージ)] > [Bus (バス)] | 値 の送信に使用するコントロール バス。 |
[Mix Stages (ミックス ステージ)] > [Value (値)] | コントロール バスを介して送信する値。 値を単位で設定するか、正規化した値を直接設定することができます。 |
[Mix Stages (ミックス ステージ)] > [Attack Time (アタック タイム)] | ミックスがアクティブ化されたときに、モジュレーション パラメータのデフォルト値から指定された 値 に到達するまでの時間 (秒)。 |
[Mix Stages (ミックス ステージ)] > [Release Time (リリース時間)] | ミックスが非アクティブ化されたときに、指定された 値からモジュレーション パラメータのデフォルト値に到達する時間 (秒) |
期間 | 「0」以上の値に設定すると、ミックスが有効になるとタイマーが開始します。 タイマーが設定した期間値に達すると、ミックスは自身を無効にします。 |
アクティベーション時に再トリガー | すでにアクティブになっているミックスをアクティブにするときの動作を制御します。 Falseに設定した場合は何も起きません (持続時間タイマーがリセットされる以外)。 Trueに設定すると、ミックスはすべてのステージをデフォルト値に戻し、アクティベートして、アタックを再びオンにします。 これは、エンベロープの再トリガーと同様に動作します。 |
コントロール バス ミックスの [詳細] パネルで提供されるミックス プロファイル ボタンは、プレイ イン エディタ (PIE) でミックスをリアルタイムで調整したりテストしたりするうえで役立ちます。 ただし、最終的なミックス コントロールの実装はブループリントで行う必要があります。
コントロール バス ミックスのプロパティが更新され、コントロール バス ミックスに関連する一部の関数には、新しい Duration 変数と Retrigger On Activate 変数の入力が追加されました。
パラメータ パッチ
パラメータ パッチはハイブリッドのコネクタモジュレーターで、主に次の 2 つの方法で役立ちます。
パラメータ パッチは、1 つ以上のコントロール バスの値を 1 つの出力値に変換します。
パラメータ パッチを使用すると、コントロール バスの値カーブをカスタマイズできます。これにより、値をリマップしたり、さまざまなフェード エフェクトを作成したりするのに役立ちます。
複数のコントロール バスを備えるパラメータ パッチをモジュレーション デスティネーションに割り当てると、それぞれのコントロール バスを個別にモジュレーション デスティネーションに割り当てるのと機能的には同じです。
パラメータ パッチのプロパティ
| プロパティ | 説明 |
|---|---|
バイパス | 有効な場合、パッチはパラメータのデフォルト値を、アタッチされているモジュレーション デスティネーションに送信します。 どちらの場合も、パラメータ パッチはアクティブのままです。 |
パラメータ | コントロール バス (インプット) のミックス方法を決定するモジュレーション パラメーター。 |
入力 | コントロール バスの参照と関連付けられているトランスフォーム情報の配列。 これらの[Inputs (入力)]の出力は、モジュレーション パラメータ パッチのミックス関数を使用してそれぞれミックスされます。 配列にコントロール バスがない場合、パッチはパラメータのデフォルト値を、アタッチされているモジュレーション デスティネーションに送信します。 |
[Inputs (入力)] > [Sample-And-Hold (サンプルホールド)] | 有効な場合、パラメータ パッチの初期化時にコントロール バスの値を格納し、パッチの存続期間中その値を保持します。 |
[Inputs (入力)] > [Curve Type (カーブ タイプ)] | コントロール バスの正規化値 [0.0 - 1.0] を再マッピングする際に適用するカーブ。 以下のオプションがあります。
|
[Inputs (入力)] > [Bus (バス)] | 入力コントロール バス。 |
モジュレーション ジェネレータ
モジュレーション ジェネレータ は、時間の経過とともに値を生成するハイブリッド コネクタモジュレーターです。 コントロール バスまたはモジュレーション デスティネーションのプロパティで値を設定することで、モジュレーションすることができます。
このプラグインは、次のタイプの実装を提供します。
低周波オシレーター (LFO):正弦波や方形波など、指定された波形の振動に基づいて値を生成します。
エンベロープ フォロワー:指定の [Audio Bus (オーディオ バス)] の振幅に基づいて値を生成します。
AD エンベロープ:指定のアタックディケイ エンベロープに基づいて値を生成します。
カスタム モジュレーション ジェネレータを作成する
USoundModulationGenerator クラス向けに提供されているコード生成テンプレートを使用すると、独自のモジュレーション ジェネレータを作成できます。このクラスは、ジェネレータを作成および登録するために必要なボイラープレート コードを生成します。
USoundModulationGenerator クラスを作成するには、次の手順を実行します。
[Tools (ツール)] > [New C++ Class (新規 C++ クラス)] を選択します。
[Choose Parent Class (親クラスを選択)]ウィンドウから、 [All Classes (すべてのクラス)] を選択します。
SoundModulatorBase の下にある SoundModulatorGenerator を選択します。
次の関数を実装する必要があります。
GetValue:0.0 ~ 1.0 の間の、キャッシュされ、正規化された単位なしの値を返すと想定されます。 この値は、リスニング モジュレーション デスティネーションに提供されます。Update:次のフレームのキャッシュされた値の計算を実装することが想定されます。
必要に応じて、次の関数を実装することができます。
IsBypassed:ジェネレータ値をデスティネーションの計算に含める必要があるかどうかに基づいて、ブーリアン値をreturnすることが想定されます。 デフォルトでは、生成されたUSoundModulationGenerator バイパスプロパティから Unreal Audio Engine に値が送られます。GetDebugValues: 非出荷ビルドでau.Debug.SoundModulatorsデバッグ コマンド ファミリーを使用して、実行時に表示されるジェネレーター インスタンスごとに文字列の配列を提供する必要があります。GetDebugCategories:これらのインスタンス値により指定されるそれぞれの値に対応するフィールド名の静的配列を提供することが想定されます。
詳細については、オーディオ モジュレーション C++ API リファレンスを参照してください。
モジュレーション デスティネーション
モジュレーション デスティネーション は、Audio Modulation アセットによってモジュレーションされる基本浮動小数点値 (指定の単位) を提供するオーディオ オブジェクトにアタッチされたエンドポイントです。
モジュレーション デスティネーションを備えているのは、次のオブジェクトです。
サウンド ウェーブ
MetaSound ソース
Audio コンポーネント
Synth コンポーネント
サウンド クラス
サブミックス
ソース エフェクト (BitCrusher および Chorus のみ)
サポートされているそれぞれのオーディオ オブジェクトのモジュレーション デスティネーションは、[Details] パネルの [Modulation] で確認できます。 各オブジェクトには、サポートされているモジュレーション デスティネーションのタイプがリストされ、ボリュームやピッチなど、どのプロパティがモジュレーションされるかを決定します。
モジュレーション デスティネーションを使用するには、関連付けられている Modulate (モジュレーション) チェックボックスをオンにして、目的のコネクタ (コントロール バス、モジュレーション ジェネレータ、パラメータ パッチ) を配列に追加する必要があります。
モジュレーション デスティネーション ルーティングのオプション
Audio コンポーネントなど、いくつかのモジュレーション デスティネーションには、継承ベースのルーティング オプションがあります。 子オブジェクトは、親オブジェクトからモジュレーション ルーティングを継承できます。 具体的には、Audio コンポーネントはアタッチされている Sound アセットから、サウンドはアタッチされている Sound クラスから継承できます。
| ルーティング オプション | 説明 |
|---|---|
無効化 | モジュレーション ルーティングを無効にします。 |
継承 | 親オブジェクトからモジュレーション ルーティングを継承します。 最も一般的にはサウンド クラスでモジュレーションを設定するため、このオプションがデフォルトです。 |
オーバーライド | 親オブジェクトのモジュレーション ルーティングを、指定した設定でオーバーライドします。 |
結合 | 親オブジェクトから継承したモジュレーション ルーティングと、指定した設定の両方を使用します。 同じモジュレーターが両方のセットに含まれている場合、計算は一度のみ行われます。 |
MetaSound の統合
Audio Modulation プラグインは、以下の MetaSound ノードを提供します。
モジュレーターの値を取得:正規化空間または単位空間で指定されたモジュレーターの値を返します。
モジュレーターをミックス:指定された 2 つのモジュレーター間のミックスされたパラメータ値を、正規化空間または単位空間で返します。
MetaSound システムの詳細については、「MetaSounds」のドキュメントを参照してください。
Audio Modulation および並列処理
ソースでのボリューム モジュレーションを有効にして、並列処理の Stop Quietest オプションに影響を与えることができる CVar を利用できます。 名称は次のとおりです。
au.Concurrency.IncludeVolumeModulation
このメニューを見つけるには、[Concurrency Asset (並列処理アセット)] をダブルクリックして、[Concurrency (並列処理)] タブの [Resolution Rule (解決ルール)] を選択します。
0 に設定すると、ボリューム モジュレーションは並列処理の評価に含まれません。
「1」に設定すると、ワンショットにはボリューム モジュレーションが含まれますが、ループ サウンドには含まれません。
2 に設定すると、ボリューム モジュレーションがすべてのサウンドに含まれます。
ブループリント API の概要
ブループリントを使用すると、モジュレーション パイプラインを動的に作成して制御し、このパイプラインを使用して、ゲームプレイや視覚効果などの他のシステムを制御することができます。
オーディオ モジュレーションに関連するブループリントの関数のほとんどは、[Audio (オーディオ)] > [Modulation (モジュレーション)] にあります。 関数の概要については、次の表を参照してください。
| 機能 | バリアント | 説明 |
|---|---|---|
アクティブ化… | コントロール バス ミックス | 指定されたオブジェクトをアクティブ化します。 |
クリア… | すべてのグローバル コントロール バス ミックス値、グローバル コントロール バス ミックス値、モジュレーター | 指定されたバスのパラメータをリセット/リンク解除して、デフォルト値に戻します。 |
作成… | AD エンベロープ ジェネレータ、コントロール バス、コントロール バス ミックス、コントロール バス ミックス ステージ、エンベロープ フォロワー ジェネレータ、LFO ジェネレータ、モジュレータ デスティネーション、モジュレーション デスティネーション | 指定されたデフォルト値でオブジェクトを作成します。 モジュレーション デスティネーションの場合、コントロール バスとジェネレータの参照はそれらのデスティネーションをカウントするため、このオブジェクトは参照の 1 つになります。 コントロール バスとジェネレータは、参照カウントが 0 より大きい場合にのみ有効になります。 |
無効化... | すべてのコントロール バス ミックス、コントロール バス ミックス | 指定されたオブジェクトを非アクティブ化します。 |
モジュレーターを取得 | 該当なし | 指定のモジュレーション デスティネーションのモジュレーターを取得します。 |
モジュレーターの値を取得 | 該当なし | 指定のモジュレーターの正規化された値を取得します。 |
デスティネーションからモジュレーターを取得 | 該当なし | モジュレーション デスティネーションに現在適用されているモジュレーターのリストを取得します。 |
監視対象モジュレーターの値を取得 | 該当なし | 指定のモジュレーション デスティネーション オブジェクトの監視対象モジュレーターの値を取得します。 |
コントロール バス ミックスがアクティブであるか | 該当なし | 指定のコントロール バス ミックスがアクティブかどうかをチェックします。 |
プロファイルからコントロール バスをロード | 該当なし | コントロール バス ミックスをプロファイルから UObject ミックス定義にロードし、 |
コントロール バス ミックスをプロファイルに保存 | 該当なし | コントロール バス ミックスをプロファイルに保存して、 |
設定… | コントロール バス ミックス、フィルター別コントロール バス ミックス、グローバル コントロール バス ミックス値、監視対象モジュレーター | 指定されたオブジェクトのプロパティを設定します。 フィルターでコントロール バスを設定 を使用すると、OSC スタイルのアドレス フィルタリングを使用できます。 |
更新… | コントロール バス ミックス、モジュレーター | 指定されたオブジェクトの更新をオーディオ スレッドにコミットします。 |
モジュレーションルーティングを追加 | 該当なし | 指定されたモジュレーターの設定をオーディオコンポーネントに追加します。 これは論理和集合を実行するため、重複するモジュレーターは追加されません。 既存の設定を完全に上書きするには、モジュレーションルーティングを設定 を使用します。 |
モジュレーションルーティングを削除 | 該当なし | 指定されたモジュレータの設定をオーディオ コンポーネントから削除します。 これはセットを論理的に減算し、つまり指定セットにないモジュレーターが残ります。 |
[Audio (オーディオ)] > [Modulation (モジュレーション)] グループ以外にも、便利な関数があります。 特に、Get Modulators 関数および Set Modulation Routing 関数は、Audio コンポーネントと Synth コンポーネントのオーバーロードを提供し、コンポーネントのモジュレーション デスティネーションを取得または設定するために使用できます。
詳細については、「オーディオ モジュレーション ブループリント API リファレンス」を参照してください。
UObject とプロキシについて
Audio Modulation コンポーネントやアセットで作業する場合は、通常 UObject 値を編集します。 ただし、Audio Modulation は 2 つの理由から、処理に UObject を直接使用しません。
UObject はゲーム スレッド上で実行されます。
UObject は、Audio Modulation システムが制御できないタイミングでガベージ コレクションされる可能性があります。
そのため、UObject の設定値は、オーディオ レンダリング スレッド上の Audio Modulation システムのオブジェクトに送信されます。 これは、覚えておく必要のある重要事項です。ブループリント関数の中には UObject を編集するものもあれば、Audio Modulation システムのプロキシ オブジェクトを変更するものもあるからです。
関数が UObject 値のみを変更する場合、プロキシに変更を送信するには、Update ブループリント関数を呼び出す必要があります。 また、UObject 値を変更しない関数を呼び出してからプロキシを更新する関数を呼び出すと、UObject 値がプロキシを上書きします。
Audio Modulation はオーディオ レンダリング スレッドで実行されますが、サンプル レートではなくブロック レートで実行されます。