清々しい初夏を迎え
木々の緑も日増しに深く、脇汗も止まらなくなってまいりました。読者の皆様に於かれましては、なお一層お健やかにお過ごしのことと存じます。
用務員バイトの片山です。全然清々しくないし夏バテであまり健やかとは言えません。ラップトップもファンがファンファン回っていて暑苦しいです。
ネタ切れ具合が著しいので今回は苦し紛れのネタでイキます。
以前にも取り上げましたが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:" + 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()
こちらも
$ python3 pyosc.py
ip:127.0.0.1, port:8002, address:/filter
type int:
12345
[1, 2, 3, 4, 5]
type int:
で、Pdのコンソールに
という感じで表示されます。
野暮ったさに拍車がかかりましたが(とりあえず動くし)面倒なので書き直しません。
こちらは多少使えそうです。折角なのでこれで簡単な音が変わるものを作ってみたいと思います。
が、面倒臭いので次回にしたいと思います。
閑話休題2
先週健康診断に行ってきたのですが、血圧が高すぎてびっくりしました。まだ22歳なのに……
一言もラーメン好きとは言ってないのに、診察の時には「ラーメンのスープ飲まないでね」と見抜かれていたので、医師ってすごいなって思いました。
塩分とアルコール、カフェインが燃料という僕のようなタイプの人は血圧に気をつけましょう。
以上
血圧の話で終わってしまってイマイチ締まりがありませんが今回はここまでにします。
関連記事
- iPhoneとopenFrameworksをOSCで接続する
- 未経験大学生によるJava入門日誌-第1話
- 未経験大学生によるPython入門日誌-第1話
- 未経験大学生によるPython入門日誌-第2話
- 未経験大学生によるPython入門日誌-第3話
- 未経験大学生によるpython入門日誌-第4話 OpenCV篇
- 未経験大学生によるPerl入門日誌-第1話
- 用務員バイトの日記:Pygameで遊んでみる