python-oscを使ってみる:前編

清々しい初夏を迎え 木々の緑も日増しに深く、脇汗も止まらなくなってまいりました。読者の皆様に於かれましては、なお一層お健やかにお過ごしのことと存じます。 用務員バイトの片山です。全然清々しくないし夏バテであまり健やかとは言えません。ラップトップもファンがファンファン回っていて暑苦しいです。 ネタ切れ具合が著しいので今回は苦し紛れのネタでイキます。 以前にも取り上げましたがPythonでOSC(Open Sound Control)を扱う方法について今回もやっていきたいと思います。前回は公式のサンプルコードをコピペしただけのイマイチな記事になっていますが、PythonでOSCを扱う際の単純なサンプルって案外転がってないなというのもあるので今回は多少真面目にやってみます。 PythonでOSCを扱う python-oscを導入する。 導入についてはpython-oscの公式ページとか前回の記事を参考にします。 公式のサンプルコードが以前とちょっと違うなと思ったらpython-oscのバージョンが上がっているみたいです。2017年7月6日現在ではバージョン1.6.3らしいです。僕のはバージョン1.6.0らしいですが、さほど変わるわけではなさそうなので1.6.0のままで行こうと思います。 ちなみにいつも通りpython3でいきます。 python-oscを使ってみる 標準入力に入れた0~9までの数字がそれぞれ何個あるのかカウントしてOSCメッセージにしてくれるような感じのコードを書いてみました。 動くには動くので、ちょっと野暮ったい書き方になってるのは許してください。 pyosc.py import argparse from pythonosc import osc_message_builder from pythonosc import udp_client port_num = 8002 # セットアップ parser = argparse.ArgumentParser() parser.add_argument(“–ip”, default=”127.0.0.1″, help=”The ip of th OSC Server”) parser.add_argument(“–port”, type=int, default=port_num, help=”The port the OSC server is listening on”) args = parser.parse_args() client = udp_client.UDPClient(args.ip, args.port) print(“ip:127.0.0.1, port:” + str(port_num) + “, address:/filter”) def main(): print(“type int:”) input_str = input() li = [] msg = osc_message_builder.OscMessageBuilder(address=”/filter”) for i in range (10): li.append(int(input_str.count(str(i)))) msg.add_arg(li[i]) print(li) msg = msg.build() client.send(msg) if __name__ == “__main__”: while True: main() 受信側(サーバー側)をPythonで書くのはちょっと面倒臭いのでPuredataを使います。 こちらはとっても簡単で、 こんな感じのパッチを作ればオッケーです。 先程のpythonのコードを走らせて適当な数字を入力します。 $ python3 pyosc.py ip:127.0.0.1, port:8002, address:/filter type int: 12345 [0, 1, 1, 1, 1, 1, 0, 0, 0, 0] type int: するとPuredataのコンソールにも という感じでメッセージが送られます。 イマイチ使え無さそうなコードです。 閑話休題1 この前ザギンの日産ギャラリーに行ってきました。 四代目スカイライン、ケンメリです。写真のものは4ドアなのでヨンメリとも言うらしいです。 python-osc続き 我ながら上のコードはクソ使え無さそうなので、ちょっと弄って入力した数字を一文字ずつにわけて送ってくれるものを作ることにしました。 pyosc.py import argparse from pythonosc import osc_message_builder from pythonosc import udp_client port_num = 8002 # セットアップ parser = argparse.ArgumentParser() parser.add_argument(“–ip”, default=”127.0.0.1″, help=”The ip of th OSC Server”) parser.add_argument(“–port”, type=int, default=port_num, help=”The port the OSC server is listening on”) args = parser.parse_args() client = udp_client.UDPClient(args.ip, args.port) print(“ip:127.0.0.1, port:” + … Continue reading python-oscを使ってみる:前編