blog.monophile.net

Takaaki Yamamoto

東京工業大学において計算機科学と応用数学を学び、情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 現在は digitiminimi Inc. において、インフラエンジニアとして生計をたててている。 また、計算を主題に制作を行い、現代音楽作品や公共インスタレーション作品など技術提供を行う。 三輪眞弘に師事する。

List

pylibloを使ってOSCメッセージを扱う

以前、pyOSCを使ってOSCメッセージを扱いましたが、今回はpylibloを使ってみます。 pylibloの方がpyOSCよりもpythonっぽいライブラリな感じがしますね。 # install  Debian/Ubuntuでは以下のコマンドで一発。

$ sudo apt-get install python-liblo

send

下記のpylibloのexampleコードを簡略化したものを載せます。

import liblo, sys
try:
    target = liblo.Address("127.0.0.1",8000)
except liblo.AddressError, err:
    print str(err)
    sys.exit()
liblo.send(target, "/foo/message1", 123, 456.789, "test")
 基本的なことは以上です。 もはやコメントも必要ないくらい簡単ですね。
["/foo/message1", 123, 456.789, "test"] -> 127.0.0.1:8000
 上記のメッセージを127.0.0.1:8000に送っているだけです。
recv
 続いて受信。 こちらも簡単だと思います。 add_methodでメッセージの区分を指定して、コールバックする関数を指定しているだけですね。 ポイントはadd_methodの引き数である'if'とかでしょうか。 'i'はint型を表し、'f'はfloat型を表します。 二回目のadd_methodは第一と第二引き数にNoneを指定することによって、 どの区分にも当てはまらなかったメッセージを処理する関数を設定しています。 そして最後に100[ms]ごとにメッセージを読みだしています。
import liblo, sys
try:
    server = liblo.Server(8000)
except liblo.ServerError, err:
    print str(err)
    sys.exit()

def foo_bar_callback(path, args):
    i, f = args
    print "received message '%s' with arguments '%d' and '%f'" % (path, i, f)

def fallback(path, args, types, src):
    print "got unknown message '%s' from '%s'" % (path, src.get_url())
    for a, t in zip(args, types):
        print "argument of type '%s': %s" % (t, a)

server.add_method("/foo/bar", 'if', foo_bar_callback)
server.add_method(None, None, fallback)

# loop and dispatch messages every 100ms
while True:
    server.recv(100)

参考URL