未経験大学生によるPython入門日誌-第2話

アバンタイトル Rubyの会社でPythonマン、片山です。 秋晴れが心地良い季節になりました。 毎日毎日温泉と甲羅酒のことしか考えていないので、あやうく相模大野で箱根方面に行ってしまいそうになりましたが、なんとか踏ん張って新宿までやってきました。 BPSには早く藤沢に引っ越してもらいたいです。 オープニング 情報系学部に在籍しながらにしてIT音痴の僕ですが、前回Python入門にチャレンジしたところ、「まぁPythonだったらやってあげてもいいかな?」という気持ちになったのでPython入門の記事を(は)続けることにしました。Ruby?いえ、知らない子ですね。 Aパート OSCにチャレンジ! OSCとはOpenSound Controlの略で、MIDI規格の後継として作られたものです。ナウな規格です。細かい説明は面倒なので真面目なネット百科事典におまかせしますが、要はアプリケーション間、デバイス間でのリアルタイム通信を行ってくれるものです。 応用すればちょっとイカしたことも出来そうなので、今回はPythonでOSCを扱ってみようと思います。 python-oscのインストール OSC用のパッケージを探していたところ、python-oscというものが見つかって、無難そうなのでひとまずはこいつでやっていくことにしました。 $ pip3 install python-osc 僕の場合はpython3を使うのでpip3でインストールしました。 心配性なので先にimportできるかチェックしてみます。 $ python3 >>> import pythonosc >>> 怒られなかったので無事インストールされているようです。 公式のサンプルを試してみます。 simple_client.py import argparse import random import time from pythonosc import osc_message_builder from pythonosc import udp_client if __name__ == “__main__”: parser = argparse.ArgumentParser() parser.add_argument(“–ip”, default=”127.0.0.1″, help=”The ip of the OSC server”) parser.add_argument(“–port”, type=int, default=8000, help=”The port the OSC server is listening on”) args = parser.parse_args() client = udp_client.UDPClient(args.ip, args.port) for x in range(10): msg = osc_message_builder.OscMessageBuilder(address = “/filter”) msg.add_arg(random.random()) msg = msg.build() client.send(msg) time.sleep(1) simple_server.py import argparse import math from pythonosc import dispatcher from pythonosc import osc_server def print_volume_handler(unused_addr, args, volume): print(“[{0}] ~ {1}”.format(args[0], volume)) def print_compute_handler(unused_addr, args, volume): try: print(“[{0}] ~ {1}”.format(args[0], args[1](volume))) except ValueError: pass if __name__ == “__main__”: parser = argparse.ArgumentParser() parser.add_argument(“–ip”, default=”127.0.0.1″, help=”The ip to listen on”) parser.add_argument(“–port”, type=int, default=5005, help=”The port to listen on”) args = parser.parse_args() dispatcher = dispatcher.Dispatcher() dispatcher.map(“/debug”, print) dispatcher.map(“/volume”, print_volume_handler, “Volume”) dispatcher.map(“/logvolume”, print_compute_handler, “Log volume”, math.log) server = osc_server.ThreadingOSCUDPServer( (args.ip, args.port), dispatcher) print(“Serving on {}”.format(server.server_address)) server.serve_forever() サーバー側が受信する方、クライアント側がOSCを送信する方のプログラムになります。ちなみに、先にサーバー側(受信側)を起動しないとうまくいきませんが、これはどのアプリケーションでOSCを扱うときにも基本となります。 $ python3 simple_server.py Serving on (‘127.0.0.1’, 5005) … Continue reading 未経験大学生によるPython入門日誌-第2話