oscpack を断念して liblo を使ったら成功!

C/C++で OSC(Open Sound Control) の送受信を行おうとしていた。それは、Sonic Pi をC/C++プログラムから操作するため、C/C++のクライアントプログラムから Sonic Pi のサーバへ OSC メッセージを投げたい。

 

oscpack の SimpleSend だとなぜだか SonicPi で音が鳴ってくれなかった。

そこで、C/C++で使える OSC のライブラリを探したところ、 liblo を発見。

liblo: Lightweight OSC implementation

github.com

 

liblo を使うと、無事に Sonic Pi と OSC な通信をして音をならすことができた。

system()関数を使うより、キーを押してから音がなるまでのタイムラグをだいぶへらすことができた。

まだすこし時間がかかっている。本来ならばどこで時間がかかっているのか計測するのが先だが、計測の精度も必要。SonicPi のサーバ側のソースを修正して計測するのが厄介。

推測だが、SonicPiサーバの処理が ruby で書かれているので、そこが遅いかもしれない。内部的には SuperColliderシンセサイザーとして利用しており、SuperCollider のメッセージも受け付けるらしいのでそちらを採用すると早くなる?