Unreal Engine 5 のオーディオ機能は、さまざまなオーディオ要件を持つプロジェクトに対応しています。 オーディオのインポートは、コンテンツ フォルダに移動するか、[Import (インポート)] ボタンをクリックするか、OS のエクスプローラーを使用してフォルダに移動することで実行できます。 エンジンは、サウンドを含む .uasset ファイルを作成します。 Unreal Engine は、.wav、.ogg、.flac、.aif、.opus、.mp3ファイルをサポートしています。 ファイルのビット深度は 16 または 24 で、任意のサンプル レートを指定できます。 Unreal Engine は、インポートされたオーディオ ファイルを内部的に 16 ビットの非圧縮 .wav 形式で保存します。
Unreal のオーディオ エンジンの詳細については、以下のドキュメントを参照してください。
サウンド キューは、実行時にサウンドを再生するために使用されるオブジェクトです。 サウンド キューは、同じコンセプトを表す複数のオーディオ ファイルから選択します たとえば、「風」のサウンド キューがあるとします。実行時に、サウンド キューは風の音の複数のオーディオ ファイルから選択して再生します。 Parrot におけるこの例として、水しぶきのサウンド キューが挙げられます:Content/Sound/SFX/WaterSplash/CUE_WaterSplashSound
サウンド クラスは、オーディオ エンジンが複数のサウンドをグループ化し、関連するすべてのサウンド ウェーブのパラメータを同時に変更するために使用するアセット タイプです。 Parrot には、音楽と SFX の両方をミックスする MainSoundClass があります。
サウンド クラスのミックスはボリュームしきい値を適用でき、サウンド クラス内のサウンドが再生されるたびに自動的に適用されます。
Parrot 固有の実装
Parrot では、ほとんどのサウンドは 1 つのサウンドを含むサウンド キューです。 ボリュームとピッチはサウンド キューごとに設定され、全体のボリュームはデフォルトのサウンド クラスと設定用のサウンド ミックスによって制御されます。 音楽を効率的に処理するために、Parrot にはカスタム オーディオ サブシステムが用意されています。
ピックアップの例
ピックアップは、1 回再生されて破棄されるシンプルなサウンド キューの例です。 ピックアップは、opengameart.org のコイン サウンド エフェクトを使用しています。 インポートされたソースアセットは、「Content/Assets/OpenGameArt/8bitCoinSounds」にあります。 これらのファイルごとに作成されたサウンド キューは、「Content/Sound/SFX/Pickups」にあります。 ピックアップ イベントが開始されたら、BP_PickupBase で目的のサウンド キューを指定して Play Sound 2D を呼び出します。
すべてのピックアップは VFX と SFX をサポートしており、接触時に破棄する必要があります。 これは BP_PickupBase クラスで実行できます。
ここでは、サウンドがワールド内の空間的な関連性を持つ必要がないため、Play Sound 2D を使用できます。 サウンドが空間的な関連性を持つ必要がある場合は、代わりに Play Sound At Location を使用できます。
音楽ループ
音楽は、標準的なサウンド キューとほぼ同じように機能します。 サウンド ファイルのインポートとサウンド キューの設定は、サウンド エフェクトと同じです。 ただし、いくつか追加手順があります。
インポートしたサウンド アセット自体で、仮想化モードが [Play When Silent (サイレント時の再生)] に設定されていることを確認してください。 これは、プレイヤーがボリューム設定を尊重できるようにするため、音楽にとって重要です。 この設定がないと、ボリュームをミュートするとサウンドが破壊され、ボリュームを元に戻しても再生されなくなります。
サウンド キュー自体で、トラック ノードをクリックし、[Looping (ループ)] が設定されていることを確認してください。
サウンド設定
Parrot のすべての設定は、さまざまなサウンドのボリュームに関連しています。
「Content/Sound/Settings」の下に、MainSoundClass というサウンド クラス アセットがあります。 [Child Classes (子クラス)] の下で、サウンド クラスを他の関連するサウンド クラスに関連付けることができます。 デフォルトの子クラスには、[SFX] と [Music (音楽)] があります。
同じフォルダに、DefaultSoundMix というアセットがあります。 MainSoundClass 設定で [Sound Class Effects (サウンド クラスのエフェクト)] を設定できます。 [Apply To Children (子に適用)] が有効になっていることを確認してください。
各サウンド キューで、クラスが適切なカテゴリに設定されていることを確認します。 ピックアップの場合は SFX クラスを使用します。
実行時にミックスの設定を変更するには、Set Sound Class Mix Override ノードと Push Sound Mix Modifier ノードを使用します。 これにより、加えた変更がすべて適用されます。
これはブループリントの例ですが、Parrot では通常、オーディオ サブシステム内の C++ で実行されます。
Parrot のオーディオ サブシステム
このセクションでは、オーディオ サブシステムの実装について説明します。 Parrot にオーディオ用のサブシステムがある理由については、「Parrot のサブシステム」を参照してください。
Parrot オーディオ サブシステムは、UParrotAudioSubsystem と呼ばれる C++ クラスです。 メイン メニューまたは一時停止メニューからいつでもボリューム設定を変更できるため、ゲーム インスタンスのライフタイムを共有します。 ゲームプレイ中は、オーディオ サブシステムはゲーム ステートの変化もリッスンします。 これにより、レベルの開始時、レベルの完了時、またはプレイヤーが境界外に出た際に、音楽トラックを変更できます。
WBP_SettingScreen は、オーディオ サブシステムの動作を示しています。 UMG (Unreal Motion Graphics UI デザイナー) からのスライダー値が C++ でサブシステムに渡されます。 ランタイム サウンド ミキサーは、値が変化するたびに更新されます。 フェードイン時間はゼロに設定されているため、ボリュームの変更は即座に適用されます。
設定は Save Audio Settings ノードで保存されています。
これらの設定を保存するためのシリアル化の仕組みの詳細については、「Parrot のシリアル化」を参照してください。
Parrot の音楽はほぼすべて C++ で作成されています。 Parrot の構造上、各マップがレベルであるため、AParrotWorldSettings クラスがあります。 このクラスを使用して、レベルの音楽など、ワールド固有のデータを設定できます。 オーディオ サブシステムはワールド設定をクエリし、必要なトラックを取得します。 ゲーム開始後のステートの変化に対応するには、WorldBeginPlay で Parrot のゲーム ステートにバインドします。