RubyのOSCモジュール

RubyでOSC(OpenSoundControl)を扱うためのモジュールをインストールする手順をメモしておく。

インストール

We retire raa.ruby-lang.org からtarアーカイブをダウンロード。
今日ダウンロードしたファイルは osc-0.1.3.tar.gz でした。
コマンドラインで、展開してできた osc-0.1.3 ディレクトリに移動し、インストールスクリプトを実行します。

>cd osc-0.1.3
>ruby install.rb

テストコード

サーバーアプリとクライアントアプリを作成してテストしてみる。参考にしたのは lib/osc.rb, sample/localtest.rb と sample/send.rb 。

#
# mytest_osc_s.rb .. サーバーアプリ.
#
require 'osc'
include  OSC

# OSCメッセージを受けるポートは 7700.
ss = SimpleServer.new( 7700 )
# OSCメッセージを受けたときの挙動を記述して登録。
ss.add_method(nil) do |mesg|
  p [mesg.address, mesg.to_a]
end
# 実行開始(戻ってきません)
ss.run
#
# mytest_osc_c.rb .. クライアントアプリ.
#
require 'osc'
include  OSC

# OSCメッセージの送り先は、同じPCのポート 7700
sc = SimpleClient.new( 'localhost', 7700 )

loop do
  begin
    mesg = Readline.readline('? ', true)
    
    # '.' を入力したら終わります.
    break if mesg == nil || mesg == '.'
    
    # メッセージを数値に変換して送ります.
    sc.send( Message.new( "/foo/test", nil, mesg.to_i ) )
  rescue
    warn $!
  end
end

上の二つのスクリプトを実行します。サーバー側は戻ってこないので、そのまま放置。クライアント側は '?'というプロンプトが出るので、そこに数字を入力して Enterキー を押します。すると、その数字が数値として送られます。

>ruby mytest_osc_c.rb
? 10

とタイプして、Enter を押すと、サーバー側のウィンドウで次のような出力が得られるはずです。

["/foo/test", [10]]

以上のように、OSCメッセージをやり取りします。

case文やif文で型を比較したときの挙動

oscモジュールのソースを見ていて不思議なコードがあり、ちょっと仕様から調べてみた。
そのコードとはcase-whenで自動的に型を判別してくれる、というものなのだ。
それに関連していろいろテストしてみたらなかなか面白い挙動になったのでメモしておく。

続きを読む