Audio Modulation の概要

Unreal Engine の Audio Modulation プラグインの概要です。

Choose your operating system:

Windows

macOS

Linux

Mixed Modulation システムにより、ブループリントやコンポーネントシステムからの共通オーディオ パラメータを細かく制御できます。このシステムには、音源のミキシング、オーディオ プロパティの動的な制御やパラメータ化のための一連の機能が備わっています。以前のバージョンの Unreal Engine で提供されていたものよりもさらに洗練されたこれらの機能により、より直感的で動的な制御が可能になります。

本システムの概要:

  • 柔軟性と汎用性を備えた分離型のパラメータ モジュレーションとミックス システムを提供

  • ゲームのオーディオ ミックスを試聴してデバッグするための堅牢な一連のツールを確立

  • 拡張が容易で、プラグインを介して音源、エフェクト、サブミックスなどさまざまなオーディオ タイプのさらなるモジュレーションに利用可能な API を提供

Audio Modulation は、実質的にあらゆる浮動小数ベースもしくはバッファ ベースのパラメータのモジュレーションを Unreal Audio Engine 内で可能にする強力なツールです。モジュレーションの基礎として、ユーザーは、モジュレーション ソースと モジュレーション デスティネーション をつなげることができます。参照するソースがない場合は、 モジュレーション パラメータ によって提供される デフォルト値 が、モジュレーション デスティネーションのデフォルト値として提供される値 (「 モジュレータ ソースとミックス ステージ 」を参照) とミックスされます。これはちょうど、従来のハードウェア パッチ ケーブルをモジュレーション入力に差し込み、出力端をアース端子や電源につなぐ操作に似ています。

Audio Modulation を有効にする

Audio Modulation プラグインにはすべてのモジュレーション機能が集約されており、軽量なエンジン側の API を実装します。

The Audio Modulation plugin must be enabled to use any of these features.

Audio Modulation プラグインを有効にするには、 [Edit (編集)] > [Plugin (プラグイン)] に行き、左側のパネルで [Audio (オーディオ)] をクリックして、[Audio Modulation] の [Enabled (有効)] チェックボックスをオンにします。

プラグインを有効にしてエディタを再起動するか、Visual Studio で再ビルドすると、Unreal で Audio Modulation システムのネイティブな実装が有効になります。

モジュレーション値

すべてのモジュレーション値は、 単位**値空間と 正規化 値空間の 2 つの値空間の間でトランスフォームすることができます。 単位空間は便利な機能としてエディタに備わっており、正規化空間ではバス値の伝達とミックスにおいて一定の方法が提供されます。すべてのモジュレーション値は、正規化された「0.0f, 1.0f」の範囲にマッピングされます。ソースからデスティネーションに値を渡す標準的な方法として、シンセサイザー機器が制御電圧 (CV) を使用するのと同様に、Modulation システムでは、正規化された浮動小数値の範囲内の値が常に含まれる 制御バス** を使用します。

ボリュームの場合、単位空間は -60 dB (無音のしきい値 - モジュレーション パラメータ を介して設定可能) から 0 dB (フル ボリューム) の範囲になり、この場合は正規化された値が 0.0f ~ 1.0f の正規化空間に対数的にマッピングされます。単位空間における +/- 12 の最小値および最大値を、それぞれ対応するモジュレーション パラメータ設定を介して調整できる別の例として、セミトーンが挙げられます。正規化空間では、常に 0.0f ~ 1.0f の範囲にマッピングされます。最も基本的なケースでは、単位空間と値空間が同じになります。つまり、すべての単位値が、0.0f ~ 1.0f の範囲で正規化された同じ値に対応することを意味します。

モジュレーション パラメータ

モジュレーション パラメータ では、バス、バス ミックス、デスティネーション、パッチに関連付けられた値の表示、ミックス、単位空間および正規化 (単位なし) 空間における「0.0, 1.0」の値の間でのトランスフォームに関するコンテキストが提供されます。これらには Unit Display Name プロパティが含まれており、これを通じて、モジュレーション パラメータを参照するすべてのモジュレータに対する単位の表示と、デフォルトのパラメータ値が制御されます。この値は、このパラメータを参照するモジュレータと別のものをミックスした際に入力値を変更しない値に設定する必要があります。(数学的には、ミックス関数が入力値として設定された際に、これを効果的に 恒等関数 に変換するための値となります。)

例えば、ボリュームの Default Modulation パラメータには、正規化空間で 1.0f の値 (単位空間では 0 dB) がデフォルトとして設定されており、これによって、乗法的にミックスされた際に出力値が変わらない結果となります (つまり、この値と入力値をミックスしても同じ出力値になります)。

The Volume Default Parameter Value results in no change at output when mixed multiplicatively.

このボリュームの [Default Parameter Value (デフォルト パラメータ値)] の設定では、乗法的にミックスされた際に出力値が変わらない結果となります。

同様に、ピッチには正規化空間での 0.5f (単位空間では 0.0 セミトーン) がデフォルト値として設定されています。0 セミトーンを追加しても、結果的にはミックスされた値と同じ値となるためです。

パラメータに関するデベロッパー向け注記: コード内では、基本クラスの USoundModulationParameter は単位空間と正規化空間から継承することが可能で、値 ( GetMixFunction ) のミックス、さらに両空間の間での値のトランスフォーム ( GetUnitConversionFunction GetNormalizedConversionFunction ) に使用される多重定義の関数を提供できます。 GetMixFunction からは FModulationMixFunction が返され、2 つの浮動小数バッファのペア、 OutValueBuffer にミックスされる InValueBuffer とともに渡されます (この InValueBuffer には正規化空間の値が含まれています)。

モジュレーション デスティネーション

モジュール デスティネーション (エンジン モジュール内の FModulationDestination ) は、浮動小数値を音源またはエフェクトに提供するあらゆるエンドポイントに設定することができ、参照先のモジュレーション ソースによる変調が可能です。

ModulationDestination_Callouts.png

1) 変調可能な基本値、 2) モジュレーションの有効/無効を切り替え、 3) 変調する対象のソース オブジェクト。

モジュレーション デスティネーションは、サブミックス エフェクト プリセット、ソース エフェクト プリセット、またはサウンド タイプ (SoundWaves、SoundCues など、全般的に SoundBase クラスから継承するあらゆるもの) のプロパティに含まれています。サウンド タイプにおけるモジュレーションの通常のモジュレーション デスティネーションには、ボリューム、ピッチ、ハイパス、ローパスが含まれます。

モジュール デスティネーションには次の 3 つの基本プロパティがあります。

  • 変調可能な base value (それぞれの単位)。 *モジュレーションの有効/無効を示す **ブール値**。

  • モジュレーション ソース オブジェクト (コントロール バス、モジュレーション ジェネレータ、またはモジュレーション パッチ)。

モジュレータ ソースとミックス ステージ

Audio Modulation プラグインでは、さまざまなタイプのモジュレーション ソース アセットが提供されます (すべて USoundModulatorBase の継承タイプで、基本クラスはエンジン モジュールに含まれています)。これらはモジュレーション デスティネーションで参照することができ、特定の状況下では互いに参照させることも可能です。これらのタイプには、 コントロール バス モジュレーション ジェネレータ 、そして モジュレーション パッチ が含まれます。モジュレーション ソースではありませんが、 コントロール バス ミックス には、コントロール バスで使用される値を駆動する働きがあることに注意してください。

次のフローチャートでは、それぞれの矢印がミックス ステージ (1 つのタイプの配列がミックスされるステージ) を表しており、コード内で指定された、入力の モジュレーション パラメータ ミックス関数 (USoundModulationParameter::GetMixFunction を参照) を使って結果の値を変更します。デフォルトのミックス関数は、すべての結果値を単に乗算するものです。言い換えると、バス ミックス (あるいはバス ミックスの配列) および/またはモジュレーション ジェネレータ (あるいはジェネレータの配列) はバスの「駆動」に使用でき、バス (あるいはバスの配列) はパッチの駆動に使用できます。最後に、チャートに示されているとおり、モジュレーション ジェネレータ、バス、またはパッチによってモジュレーション デスティネーションが駆動されます (モジュレータの配列によって別のタイプに影響を与えることができる場合は、複数の矢印で示されています)。

ModulationParameterFlowchart.png

1) バス ミックス、 2) ジェネレータ、 3) バス、 4) パッチ、 5) デスティネーション

コントロール バス (USoundControlBus)

デフォルトで、バスは参照先のパラメータ プロパティで設定された値を受け取ります。 [Bypass (バイパス)] チェックボックスがオンの場合、バスは無視されて、それによって駆動されている入力にはミックスされません。

SoundControlBus.png

[Bypass] チェックボックスをオンにすることで、バスは無視されて、それによって駆動される入力にはミックスされません。

バス ミックス (あるいはバス ミックスの配列) を介してバスを駆動する場合、クライアントでは OSC 形式のアドレスを使ってミックス値を調整できます (「 Set Control Bus Mix By Filter 」を参照)。

モジュレーション ジェネレータ の配列を提供して、バスをアルゴリズム的に駆動することもできます。

モジュレーション ジェネレータ (USoundModulationGenerator)

モジュレーション ジェネレータは、時間の経過とともに値をプロシージャルに生成できるモジュレータのサブクラスです。ジェネレータは、 コントロール バス または モジュレーション デスティネーション で直接参照できるため、これらを駆動することができます。 LFO および エンベロープ フォロワー は、Audio Modulation プラグイン内で実装されます。

LFO (USoundModulationGeneratorLFO)

LFO モジュレータは、Audio Modulation プラグインに含まれる、最もシンプルなモジュレーション ジェネレータの例と言えます。

それぞれの LFO の形状は指定された [Amplitude (振幅)] [Frequency (周波数)] [Offset (オフセット)] を順守します。LFO バス モジュレータは、次のいずれかの基本形になります ([Shape] ドロップダウンから選択)。

  • Sine (正弦波)

  • Saw (Up) (のこぎり波 - 上昇)

  • Saw (Down) (のこぎり波 - 下降)

  • Square (矩形波)

  • Triangle (三角波)

  • Exponential (指数関数)

  • Random (ランダム)

周期関数は、 [Looping (ループ)] の設定に応じてループを実行 (オン)、または実行しません (オフ)。 [Bypass] チェックボックスをオンにして、バイパスするようモジュレータを設定すると、生成される値は計算されますが、それを参照するバスまたはデスティネーションの駆動、またはそれらへのミックスは行われません。

EnvelopeFollower (USoundModulationGeneratorEnvelopeFollower)

SoundModGenEnvFollower.png

エンベロープ フォロワー では、参照先の [Audio Bus (オーディオ バス)] の入力値の振幅に基づいて、継続的に更新されるエンベロープ値を生成します。 Gain プロパティでは、指定されたスカラー値により、受け取ったエンベロープを減衰させる方法を指定します。 [Attack Time (アタック タイム)] および [Release Time (リリース タイム)] は、エンベロープの結果を効果的に滑らかにするための機能です。 [Bypass] チェックボックスをオンにして、バイパスするようモジュレータを設定すると、生成される値は計算されますが、それをリッスンするバスまたはデスティネーションの駆動、またはそれらへのミックスは行われません。

カスタム ジェネレータの作成

USoundModulationGenerator クラス向けのコード生成テンプレートが複数用意されており、デベロッパーの方はこれらを利用して、独自のモジュレーション ジェネレータを迅速、かつ容易に作成することができます。コード生成プロセスでは、ジェネレータの作成と登録に必要なすべてのボイラープレートが作成されます。この機能にアクセスするには、 [File (ファイル)] > [New C++ Class (新規 C++ クラス)] に行き、 [Choose Parent Class (親クラスを選択)] モーダル ダイアログボックスの [Show All Classes (すべてのクラスを表示)] チェックボックスをオンにします。

ChooseParentClass.png

[File] > [New C++ Class] を選択します。 [Choose Parent Class] ダイアログボックスが開きます。 [Show All Classes] をオンにして有効にします。

デベロッパーの方が実装する必要のあるのは GetValue および Update 関数のみです。 GetValue は、キャッシュされ、正規化されたユニットレスの 0.0f ~ 1.0f の値を返します。

次のフレームのキャッシュされた値の計算は Update 関数で行います。この値は Update の呼び出しを通じてフレームごとに一度生成され、 GetValue の呼び出しを介して、リッスンするあらゆるモジュレーション デスティネーションに提供されます。

オプションとして IsBypassed GetDebugValues 、および GetDebugCategories を実装することもできます。 IsBypassed は、ジェネレータ値をデスティネーションの計算に含めるかどうかを返します。これにより、生成された USoundModulationGenerator Bypass プロパティによって提供される値が Unreal Audio Engine にデフォルトで送られます。 GetDebugValues は、非シッピング ビルドに含まれるデバッグ コマンドの au.Debug.SoundModulators ファミリを使って、ランタイム時に表示する文字列配列をジェネレータ インスタンスごとに提供します。 GetDebugCategories では、これらのインスタンス値により提供されるそれぞれの値に対応するフィールド名の静的配列が提供されます。

モジュレーション パッチ (USoundModulationPatch)

モジュレーション パッチはハードウェア モジュレーションにおける「パッチ ベイ」の役割を果たすものですが、入力バス値を機能的に提供できる点で、より強力なものとなっています。

モジュレーション パッチでは、理論上可能な興味深い方法で パラメータ バス値をデスティネーションに再ルーティング・ミックスしますが、ステージをバス配列に同時に適用する コントロール バス ミックス とは異なり、パッチは、バス値を組み合わせこれらをデスティネーション (複数可) に順次ミックスする目的で使用されます。

パッチではバス値を組み合わせ、これらを 1 つまたは複数のデスティネーションに順次ミックスします。

パッチはバス 入力スロット の配列で構成されており、それぞれにはバス参照とトランスフォームの情報が含まれています。サブスクライブされているバスがない場合は、パッチで参照されるパラメータの デフォルト入力値 がパッチ出力に送信されます。

それぞれの入力には Sample-And-Hold プロパティがあります。これにより、パッチが初期化されると同時にパッチによってバス値がキャプチャされ、パッチの存続期間にわたって保持されます。サブスクライブされて、バストランスフォームされたこれらの値の出力は、パッチの モジュレーション パラメータ ミックス関数を使ってそれぞれミックスされます。それぞれの入力は、 共有カーブ アセット カスタム カーブ (パッチ アセット内に格納)、または (次の画像を参照) を使ってマッピングすることができます。

1.(赤色) 対数、2. (緑色) 指数関数 (逆数)、3. (青色) 正弦、4. (オレンジ色) S カーブ、5. (紫色) 指数関数

コントロール バス ミックス (USoundControlBusMix)

コントロール バス ミックスでは、ランタイム時にコントロール バス値を動的に駆動し、グループ化することができます。ひとつのバスを複数のミックスで駆動することも、複数のバスを一つのミックスで同時に駆動することもできます。

SoundControlBusMIX.png

コントロール バス ミックス機能を使うと、一つのバスを複数のミックスで駆動することも、複数のバスを一つのミックスで同時に駆動することもできます。

それぞれのコントロール バス ミックスには ミックス ステージ の配列が含まれています。ミックス ステージは、従来のミキサー機器のチャンネル ストリップに似た役割を果たします。ただし、コントロール バス ミックスは動的であるため、ミキサー機器とは違ってエントリをいくつでも処理することができ、従来のミキサー機器に備わっているボリューム、ピッチ、HPF カットオフ、LPF カットオフ、トリムだけでなく、実質的にあらゆるタイプのパラメータを制御することができます。

ミックス ステージには常に単一の モジュレーション値 が関連付けられており、オーディオにおける従来のチャンネル定義 (モノ、ステレオ、サラウンドなど、オーディオ ファイル セット内のチャンネル数) とは直接的な関連はありません。「ミックス ステージ」という名称は、ボリューム ミックス チェーンにおける従来のゲイン ステージにより関連するものですが、ボリュームに限定されるわけではありません。

それぞれのミックス ステージには、 Value (単位空間および正規化空間の両方で表示)、 Attack Time Release Time が含まれています。アタック タイムとは、ミックス ステージ値がそのデフォルト値 (当該バスの モジュレーション パラメータ で定義された値) から、ミックスを有効にした際に指定した値に変わるまでの時間を表します。リリース タイムは、ミックス ステージ値が現在の値からデフォルト値に戻るまでの時間を表します。

コントロール バス ミックス アセットの編集時には、[Details (詳細)] パネルに数多くの関数がツールとして提供されます。提供された関数を使って、有効/無効の状態を審査することができます。さらに、ミックスを単独で使用することや、審査されるすべてのミックスを無効化することもできます。

ミックス プロファイリング では、ルーズ コンフィグ ファイルとして保存されたさまざまな設定をテストすることができます。これを使うと、最終段階で迅速なイテレーションが可能になり、非シッピング ビルドでミックスをテストする際や、開発段階で新しいミックスをテストする際に非常に便利な機能です。また、ユーザー作成のミックスをシッピング ビルドにロードする際にも使用できます。ミックス プロファイルは、Load Mix from Profile と Save Mix to Profile のそれぞれの関数を使って、「 Saved\Config\AudioModulation 」にある複数の .ini ファイルにロード・保存されます。ミックス プロファイルは Profile Index プロパティを通じてインデックス化されます。

モジュレータの有効化

すべての モジュレーション ソース は、それを参照するデスティネーションを含むオブジェクトがインスタンス化される際に有効になります。例えば、 コントロール バス への参照を含むサウンド ウェーブがオーディオ コンポーネントで再生される際、このコントロール バスが有効でない場合は、これが有効になり、オーディオ レンダリング スレッドでこのコントロール バスに対してプロキシが効果的にインスタンス化されます。このコントロール バスへのすべての参照が破棄されると、コントロール バスが無効化されて、オーディオ レンダリング スレッドに対して、関連するプロキシを破棄するようメッセージが送信されます。

モジュレーション ソースは、これを参照する別のソースを使って有効にすることもできます。例えば、パッチが モジュレーション デスティネーション で参照されており、そのパッチがコントロール バスを参照する場合は、このコントロール バスが有効になります。

オプションとして、ブループリントから、クライアント システムで モジュレータ に対するハンドルを保持し、モジュレーション デスティネーションの参照がインスタンス化されているかどうかにかかわらず、バスを強制的に有効化することもできます。このような明示的な管理により、サブスクライブされているかどうかかかわらず、ユーザーがモジュレータに値を提供できるというメリットを得ることができます。ただし、明示的な管理を実施するには、モジュレータの存続期間中にタブを維持する上で、クライアント システムの当該部分に対する追加の作業が必要になる場合があります。これが便利な一例としては、デスティネーションがモジュレータにアクティブに登録されているかどうかにかかわらず、キャラクターの能力を Audio Engine にバス処理する場合です。

Blueprint API

(De)ActivateBus/BusMix/Modulator

これらの呼び出しにより、コントロール バス、バス ミックス、およびモジュレータを手動で有効/無効にすることができます (「 モジュレータの有効化 」を参照)。これらがすでに要求した状態 (有効または無効) にある場合は、ノー オペレーションとなり、何も処理は行われません。

UpdateModulator

スレッドの安全性を維持するために、 USoundModulatorBase の継承タイプ ( USoundControlBus USoundControlBusMix USoundBusModulatorLFO など) に対する変更は、 UpdateModulator を介してコミットする必要があります。タイプが提供されると、 USoundModulatorBase インスタンスに適用可能なすべての変更が、それぞれのランタイム インスタンスに反映されます。例えば、 USoundBase タイプでボリューム コントロール バスが参照されており、(ミックスが適用されていない状態で) これが有効な場合、デフォルト値を更新すると、そのバスによって提供されたゲイン ステージが瞬時にその USoundBase インスタンスに更新されます。

CreateLPFBus/HPFBus/PitchBus/VolumeBus/BusMix/LFO

これらはそれぞれのタイプの作成、デフォルト値の設定、すぐにアクティベートするオプションの提供のための便利な関数です。

Save Control Bus Mix to Profile

コントロール バス ミックスをプロファイルに保存して、.ini ファイルにシリアル化します。ミックスがロードされると、現在のプロキシの状態を使用します。ミックスがロードされない場合は、デフォルトの UObject 表現を使用します。

Load Control Bus Mix From Profile

コントロール バス ミックスをプロファイルから UObject ミックス定義にロードし、.ini ファイルからシリアル化を解除します。

Set Control Bus Mix

ミックスのアクティブなインスタンス プロキシでステージが提供されている場合、提供されたステージ データでミックスを設定します。ミックスの UObject 定義は更新しません。

Set Control Bus Mix By Filter

与えられたクラスのフィルタリングされたステージを、ミックスのアクティブなインスタンス向けに提供されたターゲット値に設定します。指定されない限り、ミックスの UObject 定義は更新しません。

Update Control Bus Mix

バス ミックスの UObject 定義からの更新を、オーディオ レンダリング スレッドのアクティブなプロキシにコミットします。ミックスがアクティブでない場合は無視されます。

Update Modulator

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる