Unreal EngineでWwiseを使用してマルチチャンネルオーディオのファイル入出力を行う方法 ~再生編~
今回は、Unreal Engineを用いてマルチチャンネルオーディオのファイルを再生/録音する方法を書いていこうと思います。
以下の記事はWindowsのみを対象としています。
Windowsのオーディオデバイス周りはかなり複雑です。 WDM、WASAPI、ASIOなど色々とありますが、オーディオとしてちゃんとやる場合(特にマルチチャンネルオーディオ)ではASIO一択となるかと思います。
しかし、UEからのオーディオ出力はWDM経由でしか出力できないので、スピーカーレイアウトが決まっていたり、最大でも8チャンネルの出力しかできません。
というわけで、マルチチャンネルを出力する場合はUEではない別のオーディオエンジンから出力することが望ましいかと思います。
そこで登場するのがWwiseとなります。
WWiseではプラグインでASIOがサポートされていて、入力・出力ともにASIOから行うことができます。
今回は、WWiseを使用してまずはマルチチャンネルファイルの再生をUEからおこなっていきたいと思います。(一部録音のための設定を含みます。)
WWiseとUEはあらかじめインストールされている状態とします。
プラグインの追加
WWise LauncherでASIOプラグインを使用するWWiseのバージョンにインストールします。
UEのプロジェクトへのWWiseの追加
WWise Launcherを使えば簡単にできます。この時にコピーが行われるので、前段のASIOプラグインの追加を必ずしておいてください。
この時にWWiseプロジェクトを作っていなかったら、下の方のWWise ProjectのプルダウンメニューでNew Projectで新しいプロジェクトを作成してください。
コンフィギュレーションを作成する(オプション)
基本的にチャンネル数のコンフィギュレーションがあるものについては、コンフィギュレーションを使用すれば良いと思います。
ない場合は、以下のパスのxmlファイルを編集することでコンフィギュレーションを追加することができます。
C:\Program Files (x86)\Audiokinetic\Wwise <version>\Authoring\x64\Release\bin\plugins\ASIO.xml
僕はOutput 64ch、Input 64ch欲しかったので以下のように追加しています。
<SinkPlugin Name="ASIO Output" CompanyID="0" PluginID="168" EngineDllName="ASIO" EngineStaticLibName="ASIOSourceSink"> <!-- ... --> <Value DisplayName="Anonymous 24">24</Value> <Value DisplayName="Anonymous 31">31</Value> <Value DisplayName="Anonymous 64">64</Value> <!-- add --> <Value DisplayName="Anonymous 128">128</Value> <!-- add --> </Enumeration> </ValueRestriction> </Restrictions> </Property> <SourcePlugin Name="ASIO Input" CompanyID="0" PluginID="204" EngineDllName="ASIO"> <!-- ... --> <Value DisplayName="Auro 13.1">803467534</Value> <Value DisplayName="LFE">33025</Value> <Value DisplayName="Anonymous 24">24</Value> <Value DisplayName="Anonymous 31">31</Value> <Value DisplayName="Anonymous 64">64</Value> <!-- add --> </Enumeration> </ValueRestriction> <!-- ... -->
プラットフォームの選択
さて、WWiseでの作業に入っていきます。
ASIOは近年のmacOSでは使えないですのでPlatform選択でMacを殺しておきます。 Project>Platform Mangerから以下のウィンドウを開き、Windows以外をRemoveしておきます。
再生
WWiseのことがあんまり詳しいわけではないのでアレですが全体の流れとしては、Actor Mixer Hierarchy -> Master Mixer Hierarchy -> Audio Devicesという流れで音が処理されていきます。
出力側から作っていきます。
F5でDesignerレイアウトを開き、Project ExpliorerパネルのAudioタブを選択します。
- Audio Devices Audio DevicesのDefault Work Unitを右クリックして New Chile > ASIO Outputを作成します。
チャンネルコンフィギュレーションを選択します。先ほど、チャンネルコンフィギュレーションを作成していれば、出てくるはずです。
Base Channelの値を変更することでスタートのチャンネルを選択することができます。使っているオーディオインターフェースに応じて調整してください。
- Master Mixer Hierarchy 次にMaster Audio Busを選択して、Audio Devicesを先ほど作成したASIO Outputに変更します。
変更するとBus StatusのBus Configが先ほど設定したものになってるかと思います。
- Actor Mixer Hierarchy まずは、再生したいマルチチャンネルオーディオファイルを用意しましょう。
Project > Import Audio Files...で音源ファイルをWWiseにインポートします。
インポートすると以下のようにSound FXとしてDefault Work Unitの中に作成されると思います。
試しに、Playを押すと右側のMeterが触れてオーディオインターフェースから再生されると思います。
実際に、オーディオインターフェースのソフトウェアでも再生されていることが確認できました。
この時点で再生されていない場合、WWiseエディタでのデバイスの選択が間違っているパターンです。 メニューのAudio > Authoring Audio Preference...からMaster Audio BusのAudio DeviceをAsio_Outputの再生したいオーディオインターフェースに変更します。
- Eventの作成
次はUE側からこのオーディオファイルの再生をトリガーするためのEventを作成します。
Project ExplorerのEventsタブを開きEvent > Default Work Unitを右クリックして、New Child > Playを作成します。
作成したEventはTargetのところが空欄になっていると思いますので、Project ExplorerのAudioタブに戻って先ほどインポートしたオーディオファイルをドラッグ&ドロップします。
- SoundBankの作成 Project ExplorerのSoundBanksタブを開きSoundBanks > Default Work Unitを右クリックして、New Child > SoundBankを作成します。
メニューのLayoutからSoundbankを選択して、先ほど作成したSoundBankを選択します。
SoundBankのタブのAddのところに、今まで作成してきたオブジェクトをドラッグアンドドロップしていきます。
最後にこの右上の方にあるGenereta AllをクリックしてSoundBankを生成します。
これで、WWise側での作業は終了です。
UE側での設定
まずはProject 設定をいじっていきます。
先ほど作成したSoundBankをUE側で指定します。 Root Output Pathの設定のところに、Wwiseのプロジェクトディレクトリ内にできている、Generated Sound Banksのフォルダを設定します。
次にUnreal Audio RoutingをWwiseSound Engineにします。(Bothでも大丈夫でした) この設定を変更すると再起動を求められますので、UEを再起動します。
再起動したらWWise Browserを開きます。もし正しく開けなかった場合は、ReloadやReconcileをしてみましょう。それでも改善しなければSound Bankで設定しているディレクトリが違ったり、SoundBankが正しく生成できていないので、上記の設定を確認し直してください。
Eventsの中にWwiseで作成した再生イベントがあると思うので、こちらをContent Browserにドラッグ&ドロップしてUEのアセットを作成します。
ここまできたら再生準備は整いました。 あとは、Blueprintから再生するもよし、Sequencerから再生するもよしです。
ちなみに、どのASIOデバイスに出力されるかは、環境変数 WWISEASIODRV
で指定します。
あとがき
以上がUEでマルチチャンネルファイルをWWiseを使用して再生するまでの手順になります。本当は録音も一つの記事で行こうと思ってたんですけど、かなり長くなってしまったので一旦ここまでで...
UEのアプリにパッケージしたい時とかやはり便利なことはあるかと思います。 WWiseはライセンス料かかる部分あるので必ずしも使える場面が多いとは思いませんが、本記事がどなたかの参考になれば幸いです。。。
本記事の内容を検証する上でevalaさんに作成いただいたマルチチャンネルファイルを使用いたしました、ありがとうございます。