PICrouterでOSCメッセージを送信する場合、これまではsendOSCMessage()という
関数を使っていました。具体的には
sendOSCMessage("/std", "/onboard/sw", "is", 1, "on"); sendOSCMessage("/std", "/adc/accel", "fff", 1.0, 0.325, -0.007);
という感じ。第1引数と第2引数でアドレス部を指定、第3引数でアドレス部に続く
OSCメッセージの引数のタイプタグを指定、第4引数以降で、タイプタグに応じた
引数を並べます。第4引数以降は可変長にしてあって、Cのコードで完結させている
分にはこれで使いやすく、問題ありませんでした。
しかし、mruby側でOSCメッセージを送信する処理をしたい場合に、このままだと
ちょっと使いにくいというか、mrb_define_methodして、mruby側から引数を受け取って
どうのこうのしようとすると、使い勝手悪すぎです。という訳で、sendOSCMessageで
行っていた処理を分割し、
- アドレス部のセット
- タイプタグと引数部の長さを指定
- 引数を追加
- 送信
というようにしてみました。これで、mrubyから
get_osc_packet if process_oscpacket if compare_osc_prefix('/custom') if compare_osc_address('/print') set_osc_address('/custom', '/print/return') set_osc_typetag('ifisf') add_osc_int_arg(value) add_osc_float_arg(3.14) add_osc_int_arg(15) add_osc_string_arg('mruby') add_osc_float_arg(0.2) flush_osc_message end end end
と、まぁ使いやすくなったと思います。
あとは、どのくらいmruby側で書けるかですが・・・。
コメントをどうぞ