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
- まずURLのような見た目のOSC Addressがあります。メッセージを送る上での宛先の住所となります。
- 次にOSC Type Tag Stringでどのようなタイプのメッセージかを指定します。主にi(Integer – 整数), f(float – 実数), s(string – 文字列)などがあります。
- 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)を有効化します。
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メッセージを送信するようになっています。
まず,最初に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 MessageがInt値,Add Float to OSC MessageがFloat値,Add String to OSC MessageがString値をそれぞれ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を送信する方法について書いていこうと思います。
Tomokazu Hiroki
最新記事 by Tomokazu Hiroki (全て見る)
- Unreal EngineからMaxへOSCを送信 - 11/16/2021
- ダンスミュージックのキック音作り – Ableton Live Drum Rackで素早く効率的に作る方法 Part 2 - 10/14/2019
- ダンスミュージックのキック音作り – Ableton Live Drum Rackで素早く効率的に作る方法 Part 1 - 10/12/2019