Unreal EngineからMaxへOSCを送信

Contents

OSC(オープンサウンドコントロール)とは?

ここではOSC(Oscillator-オシレーター)ではなく、OSC(Open Sound Control-オープンサウンドコントロール)について説明します。OSCはネットワークを介して演奏データなどを送受信する通信手段で、MIDIよりもより精細なコントロールが可能です。おそらくDAWなどで音楽を作っている方なら、Touch OSCなどのOSCコントローラを使用した経験もあるかと思います。DAWのコントロールに限らず、DAWとVJのソフトウェアをつないで、オーディオにシンクしたビジュアルをリアルタイムに生成したりといった使い方もできます。Deadmau5などはこのOSCを駆使しているアーティストの一人であり、彼と彼のチームが作ったOSC/PILOTというツールは最もパワフルなOSCコントローラの一つでしょう。Deadmau5はAbleton LiveとTouch Designer, Unreal Engineといった複数のソフトを連携させてライブステージを完成させています。こちらのTwitchで制作過程を公開してるので、興味のある方は見てみてください。

今回はMax/MSPとUnreal EngineをOSCで繋ぐ方法について見ていきたいと思います。Max/MSPでしたら、Max for LiveでAbleton Liveに組み込むことができる(Ableton Live Suiteの場合)ので、最終的にAbleton LiveとUnreal Engineを繋ぐことができます。Maxはある程度使ったことがあるが,Unreal Engineは初めてという方向けに,MaxとUnreal Engine Blueprintの共通点なども交えながら,説明していきたいと思います。

OSCの仕組み

OSCは,OSC Address, OSC Type Tag StringとOSC Argumentsから成り立っています。

/abc/def/ghi (OSC Address) , ifs (OSC Type Tag String) 40 35.22 hello

  1. まずURLのような見た目のOSC Addressがあります。メッセージを送る上での宛先の住所となります。
  2. 次にOSC Type Tag Stringでどのようなタイプのメッセージかを指定します。主にi(Integer – 整数), f(float – 実数), s(string – 文字列)などがあります。
  3. OSC Argumentというものが,実際に送りたい値の情報です。

Unreal Engineの準備

Unreal Engineでは、4.23からOSCが標準で装備されています。それまでは外部のプラグインなどをインストールする必要がありましたが、より手軽にOSCを使えるようになりました。4.23以降のバージョンでしたらOSCを使えますが、ここでは4.27.1を使います。

プラグインの有効化

Unreal EngineのPreference > PluginからOSCプラグインを検索し,OSC(Open Sound Control)を有効化します。

Enable Plugin

Max/MSPの準備

File > Show Package ManagerからCNMAT Externalsをインストールします。

Maxパッチ

今回はUnreal EngineからMaxにメッセージを送信する方法です。パッチは以下のようになります。

今回はint, float, stringのメッセージをUnreal Engineから送ります。

Unreal Engine Blueprint

Unreal Engineを立ち上げ,コンテンツブラウザー内で右クリックし,新規ブループリントクラスを作ります。

適当な名前をつけます。ここではOSC_BPとつけました。

ブループリントに関しては,まずUnreal Engineのサイトからコピペをします。

画像の上にマウスを持っていくと左上にCopy Node Graphという文字があらわれます。それをクリックするとコードをコピーできます。

OSC_BPをダブルクリックし,ブループリントエディタを開き,Event Graphタブへ移動します。そしたら,Ctrl+V(Win), Cmd+V(Mac)で先程コピーしたコードを貼り付けます。

OSC Client

このままでも使えますが,後ほど扱いやすいよう下のように変更を加えました。このブループリントではキーボードのXキーを押すとOSCメッセージを送信するようになっています。

左上の部分に関しては,Unreal Engineでプロジェクトを作る際にThird Person Templateなどテンプレートから作ると,キーボードのインプットが機能しないことがあります。そこで,最初にEnable Inputでキーボードインプットを有効にするようにします。
Sequenceで順番にトリガーします。SequenceはMax/MSPのTriggerオブジェクトのようなものです。Triggerでは右アウトレットから左アウトレットへ順にトリガーしますが,SequenceではThen0, Then1といった順でトリガーされます。

まず,最初にOSC Clientを設定します。ここでIPアドレスやPortの指定を行います。ClientはOSCを送信する側です。受け手はServerとなります。ここではUnreal EngineがClient, Max/MSP側がServerとなります。IPアドレスは,自分のPC内でループバックをするように,127.0.0.1という値を指定します。

右にあるSETは,Max/MSPのSendオブジェクトのような役割を果たします。コードを直接つながずにOSC Clientという名の変数に値を入れることができます。Return Valueの青いピンを右クリックすると下のようにPromote to Variableという表示がでるので,それをクリックします。

新規変数が作成され,BluePrintエディターの左側のカラムにも表示されます。ここでは,OSC Clientと名付けます。

アドレスとOSCメッセージの設定

続いてOSCのアドレスとメッセージを送ります。Convert String to OSCAddressというところが,先程のMaxのパッチ2段目のOSC Addressと全く同じようになるようにします。

その後実際に送信する値をつなげていきます。Add Integer to OSC MessageInt値,Add Float to OSC MessageFloat値,Add String to OSC MessageString値をそれぞれMaxに送信します。Valueの値を自由に変更してください。Add Integer(64-bit) to OSC Messageもありますが,こちらはMax側で対応していません。

StringのValueに関しては,Valueピンを右クリックし,先程のSET同様,Promote to Variableを選択し,Stringの値をDetailのDefault Valueに入力してあります。一度Promote to Variableをクリックして,String変数を作った後に,値を入力する前にコンパイルする必要があります。

OSCメッセージをサーバーに送信

さて,いよいよ最後のステップです。OSCメッセージをサーバー(Max/MSP)に送信します。ブループリントは以下のとおりです。

Send OSCMessageにつながっているOSC ClientとOSC Messageは前のステップでつくったSETした変数です。(参考→ブループリント変数)MaxでいうReceiveオブジェクトにあたります。左側のコラム[My Blueprint]ウィンドウからノードをグラフにドラッグ&ドロップして,Getを選択します。(参考→ノードを配置する

Playを押して,キーボードのXキーを押してみてください。Max/MSPに,OSCメッセージに設定した値が送信されます。

キャラクターやゲームアクターの位置情報などをOSCメッセージで送り,Maxをコントロールするような例も今後載せていこうと思います。

次回は,Max/MSPからUE4へOSCを送信する方法について書いていこうと思います。

The following two tabs change content below.

Tomokazu Hiroki

バークリー音楽大学院(ミュージックプロダクション・テクノロジー・イノベーション専攻)でM.M.(音楽修士),バークリー音楽大学Post Mater’s Degree Fellowship(フェローシップ)を修了。Wwise認定インストラクター。Artful Designというコンセプトを軸に,XR音楽インターフェイスOPSYNなどを研究(Epic Games社よりEpic MegaGrantsを受賞)。音楽とテクノロジーを中心としたトピックを扱っています。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です