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

本日も 暑いです。昨晩少々飲み過ぎたせいで集中力とお金がなくなってしまいました。アルバイトの片山です。用務員としてアルバイトで採用されたはずがいつの間にかダラダラと記事書くだけのお荷物になっていることに気づきましたので、今度久しぶりに雑用をしたいなぁと思っています。 さて、前回、PythonでOSC(Open Sound Control)を扱ってみようということでしょうもない感じのコードを書きましたので、それらをもう少し応用していきたいと思います。 今回も前回に引き続き、Puredataを使います。Pythonは3です。 PythonとPuredataをOSCで連携する Pythonをクライアント側(送信側)、Puredataをサーバー側(受信側)としてOSCで連携していきます。 前回も掲載しましたが、一応復習(と文字数稼ぎ)を兼ねてやっていきたいと思います。 python-oscで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() osc_msg, osc_list = make_osc(input_str) print(osc_list) client.send(osc_msg) def make_osc(input_str): msg = osc_message_builder.OscMessageBuilder(address= “/filter”) input_list = list(input_str) output_list = [] for i in range(len(input_list)): output_list.append(int(input_list[i])) msg.add_arg(output_list[i]) msg = msg.build() return msg, output_list if __name__ == “__main__”: while True: main() Pd(Puredata)のパッチは ターミナルから $ python3 pyosc.py ip:127.0.0.1, port:8002, address:/filter type int: 12345 [1, 2, 3, 4, 5] type int: するとPdのコンソールにこんな感じにOSCメッセージが表示されます。 ちなみに、上のpyosc.pyですが、(私が無精したせいで)数字以外を入力するとエラーでプログラムが終了してしまうので、数字だけ入力するように気をつけて下さい。 というか大した手間じゃなさそうなのでPythonの勉強も兼ねて強制終了しないコードに書き換えてみました。 基本的に私は「とりあえず動けばいいでしょ」という雑な性格で例外処理のような丁寧な作業はやったことはないのですが、Pythonではとても簡単に出来そうな感じだったのでちょっと書き換えてみました。 import argparse import sys from pythonosc import osc_message_builder from pythonosc import udp_client port_num = 8002 # setup 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) + “, … Continue reading python-oscを使ってみる:後編