Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

oscl : Common Lispで作る最小限のOSC通信ツールキット

https://github.com/user-attachments/assets/7483f06c-d49a-4041-9fab-2e84f928bca1

概要

osclは、Open Sound Control(OSC)を扱うための最小限のコマンドラインツールキットです。

ターミナルからOSCメッセージを簡単に送受信できるため、スクリプト作成、テスト、OSC対応システムとの迅速な統合に便利です。さらに、異なるポートやホスト間でOSCメッセージをルーティングする軽量なプロキシ機能を備えています。

前回紹介したvispと同様、Common Lispの学習の一環として開発しましたが、クリエイティブ・コーディングやライブパフォーマンス、インスタレーションといったOSCを使ったワークフローを制御・監視するための実用的なツールへと進化しました。

基本的な使い方

send mode

> oscl send \
  --host 127.0.0.1 \
  --port 7000 \
  --address "/test" \
  --args "1 2.0 hello" \
  --interval 1000

--argsの内容から型を導出するので、引数に型指定を書く必要はありません。また--intervalの値で定期的に信号を送ることができます(Ctrl + Cで停止できます)。それから指定のフォーマットのjsonファイルからアドレスと値を読み込んでOSCを送信することも可能です。

recv mode

> oscl recv \
  --port 7000 \
  --filter "point"

フィルタリング機能がついています。上の例では信号のアドレスに「point」が含まれて"いる"ものだけを表示します。--filter -pointと書くと「point」が含まれて"いない"ものだけを表示することができます。

また、不完全ですが--raw機能もついており、これはOSCのバイト列のデータを一部表示することができます。(もともとデバッグ機能でしたが、使いたいケースもありそうなので残したという感じです。)

bridge mode

> oscl bridge \
  --in-host 127.0.0.1 \
  --in-port 7001 \
  --out-host 127.0.0.4 \
  --out-port 9000 \
  --filter "light"

受信したOSC信号をフィルタリングして、また別のホスト、別のポートへ送り返す機能です。地味にあると便利な機能です。

インストール方法

vispと同じようにhomebrewで配布しています。今回もApple SiliconのMacでしか動作検証をしていないのでご注意ください。

余談(ふたたび)

どこかで書いたかもしれませんが、6月はまるまる有給休暇を取っているので、vispだけでは物足りず、新たに oscl(一応「おすかる」と読みます)というツールも開発しました。

今回もRedditで紹介してみたのですが、vispほどの反応は得られませんでした。

というのも、osclでできることは、TouchDesignerのOSCまわりのCHOPやDATでほぼすべて代用できるため、目新しさやニッチな需要はあまりなかったのだと思います。

それでも、vispの開発を経ての次のステップとしてはちょうどよく、UDPソケットの扱いやCtrl+Cによる割り込み処理など、多くの学びがありました。

簡易なプロキシ機能を持つbridgeを開発できたのでツールを公開しましたが、ゆくゆくはrecordreplayの機能も実装したいと考えています。これが実装できれば、OSCを使ってパフォーマンスの収録・リプレイをできるようになると考えています。

約1ヶ月で2つのツールを作ることができました。おつかれさまでした。

github.com