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) のような固有のものがあります。この例では、剣を振るサウンドのモジュレーション パイプラインに、両方のコントロール バスを設定できます。
コントロール バスのプロパティ
| プロパティ | 説明 |
|---|---|
| Bypass | 有効な場合、コントロール バスはパラメータのデフォルト値を、アタッチされているモジュレーション デスティネーションに送信します。どちらの場合も、コントロール バスはアクティブのままです。 |
| Parameter | 使用するモジュレーション パラメータ。指定したモジュレーション パラメータのデフォルト値が、このコントロール バスのデフォルト値として使用されます。 |
| Override Address | 有効な場合、Address プロパティを変更できます。 |
| Address | 内部参照名 (一部のブループリント関数で使用されます)。デフォルトはアセット名ですが、[Override Address] を有効にすることで変更できます。 |
| Generators | アルゴリズムでバスを制御するモジュレーション ジェネレータの配列。 |
コントロール バス ミックス
コントロール バス ミックス は、以下を行うのに役立つモジュレーターです。
- 一度に複数のコントロール バス値に影響を与える。
- 他のコントロール バス ミックスと共有されているコントロール バスでモジュレーションを行う。
- ミックス プロファイルを使用して、オーディオをリアルタイムでテストし、微調整する。
コントロール バス ミックスのプロパティ
| プロパティ | 説明 |
|---|---|
| Activate Mix | [ボタン] すべての有効なワールドで指定の プロファイル インデックス でミックスをアクティブ化します。 |
| Deactivate All Mixes | [ボタン] アクティブなすべてのワールドで、すべてのミックスを非アクティブ化します。 |
| Deactivate Mix | [ボタン] すべての有効なワールドで指定の プロファイル インデックス でミックスを非アクティブ化します。 |
| Load Mix from Profile | [ボタン] 指定の プロファイル インデックス でミックスをロードします。これにより、現在ミックスにあるすべての設定が上書きされます。ミックス プロファイルは <ProjectDirectory>/Saved/Config/AudioModulation にある「.ini」ファイルからロードされます。 |
| Save Mix to Profile | [ボタン] 指定の プロファイル インデックス にミックスを保存します。これにより、そのインデックスにある設定がすべて上書きされます。ミックス プロファイルは「<ProjectDirectory>/Saved/Config/AudioModulation」にある「.ini」ファイルに保存されます。 |
| Solo Mix | [ボタン] 他のすべてのミックスを非アクティブ化し、すべての有効なワールドにおいて指定の プロファイル インデックス でミックスをアクティブ化します。エディタ内でのテスト目的専用です。 |
| Profile Index | ミックス プロファイル ボタンの対象となるミックス プロファイルのインデックス (整数)。各ミックス プロファイルには Mix Stages の配列があり、アタッチされたモジュレーション デスティネーションがどのようにモジュレーションされるかを決定します。 |
| Mix Stages | コントロール バスの参照と関連付けられているミックス情報の配列。 |
| Mix Stages > Bus | 値 の送信に使用するコントロール バス。 |
| Mix Stages > Value | コントロール バスを介して送信する値。値を単位で設定するか、正規化した値を直接設定することができます。 |
| Mix Stages > Attack Time | ミックスがアクティブ化されたときに、モジュレーション パラメータのデフォルト値から指定された 値 に到達するまでの時間 (秒)。 |
| Mix Stages > Release Time | ミックスが非アクティブ化されたときに、指定された 値 からモジュレーション パラメータのデフォルト値に到達するまでの時間 (秒)。 |
コントロール バス ミックスの [Details (詳細)] パネルで提供されるミックス プロファイル ボタンは、プレイ イン エディタ (PIE) でミックスをリアルタイムで調整したりテストしたりするうえで役立ちます。ただし、最終的なミックス コントロールの実装はブループリントで行う必要があります。
パラメータ パッチ
パラメータ パッチ はハイブリッドのコネクタモジュレーターで、主に次の 2 つの方法で役立ちます。
- パラメータ パッチは、1 つ以上のコントロール バスの値を 1 つの出力値に変換します。
- パラメータ パッチを使用すると、コントロール バスの値カーブをカスタマイズできます。これにより、値をリマップしたり、さまざまなフェード エフェクトを作成したりするのに役立ちます。
複数のコントロール バスを備えるパラメータ パッチをモジュレーション デスティネーションに割り当てると、それぞれのコントロール バスを個別にモジュレーション デスティネーションに割り当てるのと機能的には同じです。
パラメータ パッチのプロパティ
| プロパティ | 説明 |
|---|---|
| Bypass | 有効な場合、パッチはパラメータのデフォルト値を、アタッチされているモジュレーション デスティネーションに送信します。どちらの場合も、パラメータ パッチはアクティブのままです。 |
| Parameter | コントロール バス (インプット) のミックス方法を決定するモジュレーション パラメーター。 |
| Inputs | コントロール バスの参照と関連付けられているトランスフォーム情報の配列。これらの [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:ジェネレータ値をデスティネーションの計算に含める必要があるかどうかに基づいて、ブール値を返すことが想定されます。これにより、デフォルトで、生成されたUSoundModulationGenerator Bypassプロパティの値が Unreal Audio Engine に送られます。GetDebugValues:非シッピング ビルドに含まれるデバッグ コマンドのau.Debug.SoundModulatorsファミリを使って、ランタイム時に表示する文字列配列をジェネレータ インスタンスごとに提供することが想定されます。GetDebugCategories:これらのインスタンス値により指定されるそれぞれの値に対応するフィールド名の静的配列を提供することが想定されます。
詳細については、「オーディオ モジュレーション C++ API リファレンス」を参照してください。
モジュレーション デスティネーション
モジュレーション デスティネーション は、Audio Modulation アセットによってモジュレーションされる基本浮動小数点値 (指定の単位) を提供するオーディオ オブジェクトにアタッチされたエンドポイントです。
モジュレーション デスティネーションを備えているのは、次のオブジェクトです。
- サウンド ウェーブ
- MetaSound ソース
- Audio コンポーネント
- Synth コンポーネント
- サウンド クラス
- サブミックス
- ソース エフェクト (BitCrusher および Chorus のみ)
サポートされているそれぞれのオーディオ オブジェクトのモジュレーション デスティネーションは、[Details] パネルの [Modulation] で確認できます。各オブジェクトには、サポートされているモジュレーション デスティネーションのタイプがリストされ、ボリュームやピッチなど、どのプロパティがモジュレーションされるかを決定します。
モジュレーション デスティネーションを使用するには、関連付けられている [Modulate] チェックボックスをオンにして、目的のコネクタ (コントロール バス、モジュレーション ジェネレータ、パラメーター パッチ) を配列に追加する必要があります。
モジュレーション デスティネーション ルーティングのオプション
Audio コンポーネントなど、いくつかのモジュレーション デスティネーションには、継承ベースのルーティング オプションがあります。子オブジェクトは、親オブジェクトからモジュレーション ルーティングを継承できます。具体的には、Audio コンポーネントはアタッチされている Sound アセットから、サウンドはアタッチされている Sound クラスから継承できます。
| ルーティング オプション | 説明 |
|---|---|
| Disable (無効) | モジュレーション ルーティングを無効にします。 |
| Inherit (継承) | 親オブジェクトからモジュレーション ルーティングを継承します。最も一般的にはサウンド クラスでモジュレーションを設定するため、このオプションがデフォルトです。 |
| Override (オーバーライド) | 親オブジェクトのモジュレーション ルーティングを、指定した設定でオーバーライドします。 |
| Union (和集合) | 親オブジェクトから継承したモジュレーション ルーティングと、指定した設定の両方を使用します。同じモジュレーターが両方のセットに含まれている場合、計算は一度のみ行われます。 |
MetaSound の統合
Audio Modulation プラグインは、以下の MetaSound ノードを提供します。
- Get Modulator Value:指定されたモジュレーターの値を、正規化空間または単位空間で返します。
- Mix Modulators:指定された 2 つのモジュレーター間のミックスされたパラメータ値を、正規化空間または単位空間で返します。
MetaSound システムの詳細については、「MetaSound」に関するドキュメントを参照してください。
ブループリント API の概要
ブループリントを使用すると、モジュレーション パイプラインを動的に作成して制御し、このパイプラインを使用して、ゲームプレイや視覚効果などの他のシステムを制御することができます。
オーディオ モジュレーションに関連するブループリントの関数のほとんどは、[Audio] > [Modulation] にあります。関数の概要については、次の表を参照してください。
| 関数 | バリアント | 説明 |
|---|---|---|
| Activate… | コントロール バス、コントロール バス ミックス、モジュレーション ジェネレータ | 指定されたオブジェクトをアクティブ化します。 |
| Clear… | すべてのグローバル コントロール バス ミックス値、グローバル コントロール バス ミックス値、モジュレーター | 提供されたバスのパラメータをデフォルト値にリセットします。 |
| Create… | AD エンベロープ ジェネレータ、コントロール バス、コントロール バス ミックス、コントロール バス ミックス ステージ、エンベロープ フォロワー ジェネレータ、LFO ジェネレータ、モジュレーター デスティネーション | 指定されたデフォルト値でオブジェクトを作成します。 |
| Deactivate… | すべてのコントロール バス ミックス、コントロール バス、コントロール バス ミックス、モジュレーション ジェネレータ | 指定されたオブジェクトを非アクティブ化します。 |
| Get Modulator | 該当なし | 指定のモジュレーション デスティネーションのモジュレーターを取得します。 |
| Get Modulator Value | 該当なし | 指定のモジュレーターの正規化された値を取得します。 |
| Get Modulators From Destination | 該当なし | モジュレーション デスティネーションに現在適用されているモジュレーターのリストを取得します。 |
| Get Watched Modulator Value | 該当なし | 指定のモジュレーション デスティネーションの監視対象モジュレーターの値を取得します。 |
| Is Control Bus Mix Active | 該当なし | 指定のコントロール バス ミックスがアクティブかどうかをチェックします。 |
| Load Control Bus Mix From Profile | 該当なし | コントロール バス ミックスをプロファイルから UObject ミックス定義にロードし、.ini ファイルからシリアル化を解除します。 |
| Save Control Bus Mix To Profile | 該当なし | コントロール バス ミックスをプロファイルに保存して、.ini ファイルにシリアル化します。ミックスがロードされると、現在のプロキシの状態を使用します。ミックスがロードされない場合は、デフォルトの UObject 表現を使用します。 |
| Set… | コントロール バス ミックス、フィルター別コントロール バス ミックス、グローバル コントロール バス ミックス値、監視対象モジュレーター | 指定されたオブジェクトのプロパティを設定します。Set Control Bus Mix By Filter を使用すると、OSC スタイルのアドレス フィルタリングを使用できます。 |
| Update… | コントロール バス ミックス、モジュレーター | 指定されたオブジェクトの更新をオーディオ スレッドにコミットします。 |
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 はオーディオ レンダリング スレッドで実行されますが、サンプル レートではなくブロック レートで実行されます。