はじめに
TidalCyclesはHaskell製ライブコーディングツールで、リアルタイムでコードを実行して、SuperCollierのSuperDirt経由で音を鳴らしせたりします。そのままだと音を鳴らすことしか使えなさそうなのですが、応用として他のアプリケーションをトリガーして同期させるようにしてみます。
環境
TidalCycles 0.8
SuperCollider 3.8
内容
処理のフローは以下の通りです。
TidalCycles -> SuperCollider側でOSCをキャッチ -> SuperColliderから別ポートにOSCを送信 -> 別アプリでOSCを受信
TidalCyclesのOSC出力を受信する
TidalCyclesは音を鳴らす際にSuperCollider側にOSC通信を行っています。OSCのパスは/play2
です。
これをSuperCollider側でキャッチするようにします。
SuperDirt.start;
OSCdef(\test, {
|msg, time, addr, recvPort| 'osc'.postln;
}, '/play2', n);
これで/play2
を受信した際に受信したmsgを出力します。
SuperCollider側でOSCを送信する
/play2
が受信できたので、あとはそのタイミングで別のポートにMessageを送信します。
SuperDirt.start;
b = NetAddr.new("127.0.0.1", 12345);
OSCdef(\test, {
b.sendMsg("/hello", "there");
}, '/play2', n);
これで送信されます。あとは各自受信用アプリケーションでOSCを受信します。例えばoFのサンプルに入ってるoscRecieveExampleを実行してもらえればメッセージが表示されるはずです。
注意事項
TidalからのOSCを直接受信しているわけではないので遅延が発生する可能性はあります(深く検証はしてない)。
最後に
TidalもSCも情報少なすぎて死ねる・・・