バージョン
menu
|
Wwise Unreal Integration Documentation
|
AkAudioMixerモジュールの目的は、プラットフォームを問わないUnreal Audio Mixerを提供することで、最終的にはUnrealとWwiseの両オーディオミキサーが同時に動くようにします。
すでにUnreal Audio Mixerはプラットフォームに依存していなく、Windows、Mac、Android、コンソールなどで同様に動作します。Unrealは、プラットフォームに依存しないためにMixer Platformを使い、プラットフォームのハードウェアと、プラットフォームから独立したコードとのやり取りを、ここで処理します。Unreal Audio Mixerも、Wwise SDKも、自動的にプラットフォームのオーディオを初期化し受け入れます。ただし、多くのプラットフォームでは複数のソースから同時にオーディオを受信することができず、1つの固有のオーディオシステムを初期化するようなコンソールでは特に難しく、2度も初期化するとクラッシュするものもあれば、2つのシステムが無作為に同じオブジェクトとやり取りできてしまうものもあります。
これまでWwiseのドキュメンテーションで提案されてきたのは、プロジェクトにWwiseを使う予定がある場合に、UnrealのAudio Mixerを無効にするという対応策です( よくある質問 参照)。 AkAudioMixerモジュールは同時進行の、プラットフォームを問わないソリューションを提供し、UnrealのAudio Mixerのデフォルトプラットフォーム(XAudio2、SDL Audio、AudioOutなど)は、代わりにWwiseプラットフォームを使うことになります。そうすることで、WwiseはPlatform Sound Engineを適切に初期化でき、Unrealはオーディオを処理できます。
このモジュールは、2つの異なる入力コンポーネントを提供し、どちらも基本的な AkAudioInputComponent を通して処理されます。
詳しくは オーディオインプットをポストする 301 のコースを参照してください。
FAkMixerPlatformでは、Wwise Sound Engineが、Unreal Audio Mixerのプラットフォーム専用部分の代理として機能します。そうすることで、ステレオのフィードで、Unrealミックスダウンの最終結果をWwise Audio Inputとして取得できます。
これまでの、Audio Mixerを無効にするという対応方法では、Unrealにオーディオクロックが提供されず、オーディオフィードを駆動するものが何もないという限界がありました。このため、Unrealはオーディオを一切提供しませんでした。Audio Mixerを駆動する何か(FAkMixerPlatform)が存在することで、Unrealのオーディオシステム全体を、完全に機能する状態で、Wwiseのオーディオシステムと共に維持できます。
現在のソリューションは、Unrealオーディオをステレオのみで提供します。このUnrealのミックスダウンは、Wwise内でミュートされると予想され、おそらく使われるのは仮の解決策としてだけです。同時進行する2つのスペーシャリゼーション方式が存在することで、オーディオの問題が発生するので、このソリューションは取り急ぎの迂回策として提供されています。今後、FAkMixerPlatformが適切に設定されたときに、プロジェクトでオブジェクト用に実際の入力が必要となれば、Unrealのサブミックスを利用すると考えられます。
AkSubmixInputComponentを使えば、Unrealのどのようなオーディオサブミックスでも、簡単にWwise Audio Inputコンポーネントにつなげることができます。動画のオーディオなどミックスの一部だけを取り出し、個別にWwiseに送れるようになります。このサブミックスを、Wwiseの必要に応じて任意のチャンネルコンフィギュレーションで提供できます。当然ながら、UnrealからWwiseにオーディオをプッシュする際に、制約事項やパフォーマンス上の検討事項があります。可能な限り、フロー全体をWwiseで直接設定することが望まれます。
個別のアクターからUnrealオーディオを取得するために最も望ましいのは、 UAkSubmixInputComponent を使う方法です。通常のWwise Unrealインテグレーションを通してAudio Input Componentを該当するアクターポジションにリンクすることで、Wwiseの組み込みスペーシャリゼーション機能や、2021.1以降であればオブジェクトベースのパイプラインも使い、プロジェクトに望まれるオーディオプロパティや音質を達成できます。
このコンポーネントはFAkMixerPlatformを必要とせず、独立して使用できます。ただし、Unrealの特定プラットフォーム用オーディオと、Wwiseの特定プラットフォーム用シンクを同時に初期化すると、2つのオーディオパイプラインを並行させることができるものの、プラットフォームによっては、やはりクラッシュしてしまうので、注意してください。
FAkMixerPlatformとUAkSubmixInputComponentは、どちらもWwiseの“Play” Eventで初期化されます。これにより、Wwise Sound EngineがUnrealコンポーネントのポーリングを開始できます。
このEventを有効にすることでポーリング処理が開始され、この処理は絶対にバーチャル化してはならないことを、意識することが大切で、開始または停止だけを行い、FAkMixerPlatform入力コンポーネントを常に再生中としなければ、Unrealオーディオパイプラインが正しく機能しません。
初期化が終われば。オーディオパイプライン全体をツリーとしてとらえることができ、数ミリ秒ごとに実行してハードウェアに次のオーディオチャンクを提供します。
ツリーでは、まず最初に、プラットフォームハードウェアがWwise Sinkにオーディオバッファを要求します。次にWwise Sound Engineが再生中のAudio Input Componentに、それらのオーディオについてポーリングします。
この時点でポーリングされたFAkMixerPlatformは、Unreal Master Submixから次のバッファを要求します。そうすると、Unrealのサーキュラーオーディオバッファが空になるので、パイプライン全体が処理を続けることができます。
シーケンシャルで同時進行する2つのシステムがあると、最終的なミックスに多少のレイテンシが発生します。Unreal側は、A/Vコンポーネントが独自のスピードで再生するものととらえ、サーキュラーバッファを使い、Audio Mixerが要求するのと同じスピードでオーディオを提供します。
Unreal Master Submixも、Audio MixerのFOutputBufferにサーキュラーバッファを設定し、有効なスピードでオーディオを確実に提供できるようにします。
個々のサブミックスはMaster Submixにプッシュされ、Wwiseも同じときにバッファを要求するので、UnrealとWwiseの両方が、要求をプッシュすることになります。
最後に、WwiseのSinkバッファもあり、これはコードでカスタマイズできます。
Wwise Audio Inputソースプラグインが、外部ソースからくる入力をWwise内で使えるようにします。任意の入力に対して、これをWwise側で使います。
Unreal Mixをキャプチャするには、Wwise Audio Inputを1つと、データ取得プロセスを開始させるEventを1つ、作成する必要があります。
推奨されるプロセスは、Master-Mixer Hierarchyにバスを作成し、Wwise Audio Inputソースプラググインを使うSound SFXを作成することです。名前は、この例と違う名前でもよく、設定も同じでなくても構いません。大事なのは、最終的にMaster Audio Busに接続することで、このコンポーネントが提供するオーディオが、最終的に廃棄されるとしても、接続させてください。最終結果をミュートする場合は、ボイスがバーチャル化してしまうとUnreal Audioパイプラインを稼働し続けるために必要なオーディオのポーリングが排除されてしまうので、絶対に避けてください。
Unreal_Input Sourceの作成は、複雑ではありません。空のSFXを作成し、Contents Editorで、“Add Source >>”ボタンを選択して Wwise Audio Inputソースプラグインを追加します。
ボリュームオフセットを、あとからソースレベルで設定したり、Sound SFXオブジェクトに直接設定したりできます。
サウンドにAudio Inputソースを設定できたら、このサウンドを適切なOutput Busにルーティングしますが、今回の例では、それは“Unreal Input Bus”です。
最後に、このSound SFXのPlayを実行するEventが必要で、これがなければAudio Inputが開始されません。また、このEventを再生することで、Unrealが、FAkMixerPlatform用にどのAudio Inputを使うのかを判断できます。
Audio Inputプラグインを対象とするEventを作成するには、Sound SFXを選択し、右クリックし、New Event > Playを選択します。Eventの名前は自動的にPlay_[SoundName]となりますが、自由に変更できます。
![]() |
警告: FAkMixerPlatformを、常に“Playing”(再生中)にする必要があります。そうすることで、UnrealのAudio Mixerが、コンポーネント用にオーディオを処理します。FAkMixerPlatformが再生されないと、Unrealのサーキュラーバッファがいっぱいになり、それ以降はオーディオにレイテンシが加わる可能性があります。なお、このチャンネルをミュートする場合は、それでも再生が続き、オーディオが無いからといって絶対にバーチャル化したり停止したりしないでください。 |
あなたのプロジェクトでEvent-Based Packagingを使っている場合は、このEventが自動的に準備されます。あなたのプロジェクトで標準的なSoundBankパッケージングを使っている場合は、最初にロードするSoundBankに、必ずFAkMixerPlatformの“Play” Eventを入れ、それが絶対にアンロードされないようにしてください。
Unrealに、プラットフォーム自身のAudio Mixerではなく、Wwiseのオーディオミキサーを使うように指示する必要があります。プラットフォームごとに、次の行を、 <Project>/Config/<Platform>/<Platform>.ini 、または <UE4_ROOT>/Engine/Config/<Platform>/<Platform>Engine.ini に追加します。なお、プロジェクト設定は、エンジン設定をオーバーライドします。まだファイルがなければ、作成する必要があるかもしれません。
次に、適切なWwise Integrationを有効にできたら、Project SettingsのAudio Input Eventに、作成済みのPlay Eventを使う必要があります。これが、あなたのUnrealプロジェクトのFAkMixerPlatformコンポーネントを、Wwiseサウンドエンジンにバインドします:
以上が基本的な設定です!この時点で、Wwiseで(またはUnreal Waapi Pickerで)SoundBanksを生成し、Unreal Editorを再起動してください。なお、Audio Input Eventは一度しか初期化されないので、変更するたびに再起動が必要です。Wwise Authoringで、Unreal Playerに対してProfilerを開始すれば、あなたのAudio Busのメーターが動くのが分かります。
Unrealは、ITargetPlatformインターフェースを通して、オーディオのエンコード方法を決めます。各プラットフォームで、 GetWaveFormat と GetAllWaveFormats のメソッドをDerived Dataシステムで呼び出し、サポートされるオーディオフォーマットを判断します。これは、 AkAudioMixer システムでオーバーライドされません 。この関数を通して、サポートされる汎用フォーマットが提供されていることを確認する必要があるので、自分で必要なファイルをオーバーライドするか、特定プラットフォームのエンコードではなく汎用エンコードを使うための条件が満たされていることを確認してください。
あるいは、Unrealソースコードを変更することに抵抗がなければ、以下のファイルパターンで、ターゲットプラットフォームのオーディオフォーマットを変えることができます: Engine/Platforms/<PlatformName>/Source/Developer/<PlatformName>TargetPlatform/Private/<TargetName>TargetPlatform.cpp
プラットフォームのオーディオフォーマットが、以下のファイルに見られるように、FMixerPlatformWwiseの CreateCompressedAudioInfo メソッドと同等であることを確認します:
Plugins/Wwise/Source/AkAudioMixer/Private/AudioMixerPlatformWwise.cpp
どの UAkSubmixInputComponent でも、Wwiseプロジェクトの準備はFAkMixerPlatformのときと似ていて、プロジェクト内に新しいWwise Audio Input Sourceを作成し、再生するEventを用意します。あとで、あなたが作成するBlueprintで、このEventをあなたのUnrealプロジェクトにバインドします。
![]() |
警告: 警告: FAkMixerPlatform 入力と同様に、Wwiseオブジェクトが絶対にバーチャルになったり、勝手に停止したりしないようにします。このEventの再生や停止は、必ずUnrealが行うようにします。そうでないとUnreal側のバッファがすぐにいっぱいになってしまい、遅延やメモリ使用量の急増が発生します。 |
この最初の部分で、デフォルトのMaster SubmixをオーバーライドしてAudio Submixフローをカスタマイズできるように、あなたのUnrealプロジェクトを設定します。新しいMaster Submixを変えずに、環境内にツリーがない状態で、この手順を完了させた場合は、Default Master Submixと、あなたの新しいサブミックスは、聞いて分かるような違いはありません。1つのUnrealプロジェクトにおいて、Master Submixは1つしかなく、すべてのワールドでそれを共有します。
あなたのプロジェクトに、新しい“Sound Submix”を作成し、これを“Master Submix”として利用します。どのような名前でも構いませんが、Masterであることが分かるようにしてください。この例では、“MasterSubmix”という名前にしました。
あなたのプロジェクトのAudio Settingsを開き、MixセクションでMaster Submixを新しく作成したAudio Submixに設定します。
この時点で、空のカスタムMaster Submixがあり、特別なルーティングはありません。あなたのプロジェクトは、Default Master Submixのあるバージョンと、全く同じに聞こえます。
Unreal内の複数のアクターのオーディオを効率的にキャプチャするには、サブミックスのカテゴリごとに、新しいサブミックスを2つ作成する必要があります。Unrealのサブミックスの扱い方に合わせて、2つの別々のサブミックスの階層が必要です。これで、サブミックスのオーディオが、このサブミックス以外のオーディオと事前にミックスされてしまうのを防げます。
名称を適切なものにするために、今回はサブミックスという名前を使い、2つ目の方は“Passthrough”というサフィックスを付けました。今回の例では、1つ目をAmbianceSubmix、2つ目をAmbianceSubmixPassthroughという名前にしました。あなたのサブミックスの名称は、必要に応じて、自由に決めてください。
Master Submixを作成し、使用する セクションで定義した、カスタムMaster Submixを開きます。次に、本当のサブミックスとMaster Submixの間で、異なるPassthroughが設定されるグラフを追加します。サブミックスは増やすことができ、サブミックスの順序は自由に定義できます。ここで重要なのは、 Submix -> Passthrough -> Next in Tree の順序とすることです。
例えば、2つの異なるサブミックスがあれば、以下のグラフを使えます:
この時点で、サブミックスは未使用で、アサインされていません。すべてのオブジェクトの、すべてのオーディオが、これまで通りMaster Submixに送られるので、あなたのプロジェクトは、今までとまったく同じに聞こえます。ところが、各種アクターが、ここで定義したDiscussionSubmixやAmbianceSubmixのような自分のカスタムサブミックスにオーディオを送り始めれば、オーディオがDiscussion UAkSubmixInputComponentと、Master Submixの、両方に送られ、重複したオーディオが発生します。
このような重複を防ぐには、複数PassthroughミックスのOutput Volumeを、0に設定する必要があります。そうすることでミックスダウン中にMaster Submixに送られるオーディオがなくなり、同時に、Discussionや Ambianceのサブミックスのオーディオがすべて、カスタムのWwise Audio Inputコンポーネントに送られます。
サブミックスにオーディオを追加するのは、とても簡単です。SubmixタブのAudio Effectsで、アセットのサブミックスを使いたいサブミックスに設定します。
![]() |
警告: どのSubmixも複数のアセットをアサインすることが可能ですが、それらのアセットは、Wwise Audio Inputコンポーネントに送られる前にミキシングされるので注意してください。また、サブミックスを制御しようとするアクターが増えると、EventのPlayやStopが難しくなります。また、そのような場合はポジショニングの設定も難しくなります。 それでも1つのサブミックスに複数のアセットをアサインするというアプローチで進める場合は、レベルの始めにPlay Eventを実行し、レベルの終わりにStop Eventを実行するのが望ましいかもしれません。そうすると、このレベルでオーディオチャンネルが常時開いているので、パフォーマンスに明らかに影響が出て、数が多ければ、それらが全てWwiseにオーディオをプッシュし、ミックスしなければなりません。 あるいは、オーディオデータ送信のライフサイクルを決定するマスターコンポーネントを1つ設け、同時に、このチュートリアルで必要なときにオーディオを提供するサブコンポーネントを複数設ける、という方法もあります。 |
この例では、Unreal Content Browserに新しいWAVファイルをインポートし、サブミックスを変更して最終デスティネーションを定義しました。
あなたが、このチュートリアルを順に追っている場合は、この時点でSoundWaveアセットを再生してもオーディオが出ないはずですが、それは、Passthroughボリュームを0に設定してあり、音の出るトラックが、Master Submixに送られないからです。また、必要なAudio ComponentのPlayやStopのためのEventを、設定していません。
さらに、コンポーネントとして設定してあるだけなので、あなたの現在のUnrealワールドでは、使われていません。これらの手順は、次のセクションで実行します。
このセクションでは、作成したサブミックスをWwiseのAudio Input Componentにバインドするための、UAkSubmixInputComponentの設定例を説明します。使用例の1つなので、あなたのプロジェクトの具体的な要件に従い、自由に設定してください。
このチュートリアルではAmbientSoundアクターを通してオーディオを提供しますが、ほかのAudio Componentや、Audio-Videoコンポーネントさえも、オーディオをサブミックスに対して再生するのに使えます。
まず、新しいBlueprintクラスを作成し、その親クラスをUnrealの AmbientSound とします。アクセス可能な AkAmbientSound アクターもあることに、注目してください。これは、Wwise専用Ambient Soundを作成するために使うもので、今回のチュートリアルでは使いません。
![]() |
注記: パフォーマンス上の理由から、可能な限り、 AkAmbientSound を使うことを推奨しますが、 AkAudioMixer の場合は、オーディオがすでにWwiseで再生されてレンダリングされているので不要です。 |
この例では、AmbientSoundアクターコンポーネントの名前を“AkSubmixAmbient”としました。あなたの命名規則に従い、名前を付けても構いません。
すでに作成したSoundWaveを、SoundセクションのAmbientSoundオブジェクトにリンクさせます(下図の右下に表示した通り)。これはまだ汎用コンポーネントなので、単純にデフォルト値として使います。
PlayやStopのEventを制御し、サブミックスをWwise Audio Input ComponentにバインドするためのUnrealコンポーネントが必要です。これは、 AkSubmixInput Audio Component経由で行います。
ルートコンポーネントの下の、あなたの AkSubmixAmbient Blueprint に、 AkSubmixInput コンポーネントを追加します。
Event Graphで、必ずAk Submix InputコンポーネントのイベントをBeginPlayでポストし、コンポーネントをEndPlayで停止します。
これで、BeginPlayが終わったときにオーディオデータ送信がアクティブになり、End Playに到達したらすぐに停止されます。ここは、最適化のためにクリエイティブに考えてみてください。デフォルト値よりも、これを最適化したければ、あなたのアクターのライフサイクルに従い、必要なときだけAudio Inputの処理を開始・停止できます。
ここで、ブループリントをコンパイルして保存します。
新しいブループリントをレベルにドラッグ&ドロップして、インスタンス化します。
Detailsパネルで、Soundプロパティに好きなSoundWaveを設定します。これが本当の値で、デフォルトではありません。
AkSubmixInputコンポーネントを選択します。
それでは、ここでWwise Audio Input Componentの再生を開始させるAk Audio Eventを定義し、このComponentのSubmix to Recordを定義します。Submix Inputセクションで、適切なSubmix to Recordを選択し、Audio InputをPlayするAk Eventを選択します。
以上です!この時点で、Ambientサウンドを再生するのにサブミックスが使われ、サブミックスミュートにされ(Submixツリーで出力ボリュームが0に設定されているため)、オブジェクトのオーディオを再生するためにAudio InputがWwiseで適切に使われるはずです。