PICrouterのOSC送信用関数

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で
行っていた処理を分割し、
 
  1. アドレス部のセット
  2. タイプタグと引数部の長さを指定
  3. 引数を追加
  4. 送信
というようにしてみました。これで、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側で書けるかですが・・・。

コメントをどうぞ

Your email address will not be published. Required fields are marked *

*