この記事は、Houdiniアドベントカレンダー2017 2日目の記事です。
Houdiniのカーブエディタの操作感が好きなので、これでリアルタイム系のもののタイムラインがいじれるといいんだけどな~… と、常々思っていたのですが、ついに一念発起してHDAとして整備しました。
どういう感じなのかは、使い方動画を見てもらったほうが早いと思うのでこちらをどうぞ
HDAをObjレベルに作り、OSCで送信したいCHOPのパスと、IP、ポートを設定して Init
ボタンを押すと動作します。
もうちょっといい感じの例を… と思いましたがそこまでいい感じのサンプルができませんでした。。。
この動画では TouchDesigner にOSCメッセージを送ってHoudiniのタイムラインと同じ動きをさせています
インストール
こちらからzipをダウンロードしてきて、
https://github.com/satoruhiga/HoudiniOSCExport/releases/
otls/oscexport.hda
を $HOME/houdini**/otls/
に、
scripts/python/OSC.py
を $HOME/houdini**/scripts/python/
にそれぞれコピーしてください。
フォルダがない場合は新規に作ってそこに入れればOKです
ところでOSCとは?
と、当たり前のように進めてしまいましたが、何だそれは、、という感想の人が圧倒的に多いと思いますので、ここで簡単にOSCの説明をしたいと思います。
WikipediaによるとOSCとは、
OpenSound Control(OSC)とは、電子楽器(特にシンセサイザー)やコンピュータなどの機器において音楽演奏データをネットワーク経由でリアルタイムに共有するための通信プロトコルである。カリフォルニア大学バークレー校にある CNMAT(The Center for New Music and Audio Technologies)が開発した。
というようなことらしいのですが簡単に言うと、
- UDPの通信プロトコル
- 主にLAN内で、リアルタイム性の高い短いメッセージをやりとりする
- 音楽、インタラクティブアート系のソフトウェアの通信によく使われる
という風なものです。
タイムラインのコールバックを登録する
最初は安易にPython SOP上に実装していたのですが、そうしてしまうとビューポートを隠してアニメーションエディタのみを全画面に表示した場合にSOPのCookが走らず、メッセージが送信されない、、といった問題が起ったため、代替案を探していました。
マニュアルを読んでいると、hou.playbar.addEventCallback(callback)
を使うとHoudiniの画面下部のプレイバーの状態が変化した時に呼ばれるコールバックにユーザー定義の関数を登録できそうだったので、そちらを試してみた所上手くいきました!
OSCタイムラインとしてHoudiniを使うメリット
OSCを送出できるタイムラインというと VEZÉR などがありますが、OSXでしか動かず、かつ1ライセンス一万円程度と割とお高いのですが、このHDAだとHoudini Apprenticeでも動きますので実質無料です!
また、最初にも書きましたが、Houdiniはカーブエディタの使い勝手が非常にいいので普通にタイムラインとして使うだけでも有用なのではと思いますが、この動画 でやっているように、CHOPにサウンドファイルを読み込んでプロシージャルにアニメーションロジックを組んでいく、というような高度なアプローチにも応用できます。
HoudiniのCHOPの値は色々な形式でファイルに書き出せるので、アイデア次第でリアルタイムとノンリアルタイムの中間のようなワークフローが作れるのではないかな~ とぼんやり考えています
おわりに
現状の問題として、hou.playbar
のコールバックがメッセージ送信のトリガーになっているため再生が停止した状態で値を変更してもOSCが飛ばないというものがあります…
CHOPのCook終わりのコールバックなどがあれば解決なのですが、ちょっと探した所見当たらず。うーむ
まだまだできたてなので不具合などあると思いますが、ちょくちょくアップデートしていこうと思っています。。
これはおかしいのでは?という点ありましたらこちらのコメントか、GithubのIssueで報告していただけると対応します!
(2日目からあまりHoudiniっぽくない内容ですみませんでした!)