未経験大学生によるPython入門日誌-第2話|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。CONTACTTOPライフ未経験大学生によるPython入門日誌-第2話ライフ2016.11.30未経験大学生によるPython入門日誌-第2話Yuki.KシェアツイートブックマークLINEアバンタイトルRubyの会社でPythonマン、片山です。秋晴れが心地良い季節になりました。毎日毎日温泉と甲羅酒のことしか考えていないので、あやうく相模大野で箱根方面に行ってしまいそうになりましたが、なんとか踏ん張って新宿までやってきました。BPSには早く藤沢に引っ越してもらいたいです。オープニング情報系学部に在籍しながらにしてIT音痴の僕ですが、前回Python入門にチャレンジしたところ、「まぁPythonだったらやってあげてもいいかな?」という気持ちになったのでPython入門の記事を(は)続けることにしました。Ruby?いえ、知らない子ですね。Controlの略で、MIDI規格の後継として作られたものです。細かい説明は面倒なので真面目なネット百科事典におまかせしますが、要はアプリケーション間、デバイス間でのリアルタイム通信を行ってくれるものです。応用すればちょっとイカしたことも出来そうなので、今回はPythonでOSCを扱ってみようと思います。python-oscのインストールOSC用のパッケージを探していたところ、python-oscというものが見つかって、無難そうなのでひとまずはこいつでやっていくことにしました。python-osc僕の場合はpython3を使うのでpip3でインストールしました。心配性なので先にimportできるかチェックしてみます。pythonosc>>>怒られなかったので無事インストールされているようです。公式のサンプルを試してみます。server.serve_forever()サーバー側が受信する方、クライアント側がOSCを送信する方のプログラムになります。ちなみに、先にサーバー側(受信側)を起動しないとうまくいきませんが、これはどのアプリケーションでOSCを扱うときにも基本となります。5005)127.0.0.1=localhostの5005番ポートで受信する用意が出来ました。次はクライアント側(送信側)を起動します。simple_client.pyん?動かない......。サンプルのくせに動かないとは何事だ!と若干苛々しながら原因を探していきます。リターンキーを叩く音がだんだんと大きくなって行く中、伏兵は意外なところにいました。サンプルコードだからといって信用し切っていたため、なかなか気づかなかったのですが、上のソースコードでは単純にポート番号が一致していませんね。5005番に合わせて再チャレンジ。してみても受信側に何故か表示されず、Puredataを使ってみてやっとOSCが飛んでいるのを確認しました。受信側のどこかに問題があるみたいですがどこをどうしたものか.........と思って調べていた所、公式サイトのサンプルと公式githubのサンプルが若干違うことに気づきました。githubのものではちゃんとポートが揃っている、送信側でもメッセージをprintしている等しっかりしていそうだったのでこちらを利用してみたらうまくいきました。0.3705088198184967みたいな感じになり成功しました。CM最近ブラックビスケッツにハマっているんですが、iTunesにはブラビの曲がないのです。「タイミング」のビビアンカバーとかはあるんですけど......。ほかにも90年代といえばRebecca、Lindbergあたりの邦楽(一部楽曲)は妙にハマりますね。ちなみに筆者は毎年この時期になると、夜中に部屋で一人になって、稲垣潤一の「クリスマスキャロルの頃には」を聴いては寂しい気持ちになるのが恒例行事です。Bパート閑話休題さてさて、先程は単にサンプルを動かしていただけであまり面白くなかったのでここからは少しひねりを加えていこうと思います。応用してみるひねりもなにも、僕自身がひねくれ者ですので、「これ、わざわざPythonでやんの?アホなの?」ってことをやっていこうと思います。そんなに難しいことは出来ないので、奇抜さでどうにかしようという作戦です。ここでとりぃだしましたるはSuperColliderという音響開発環境。インストールは公式サイトからダウンロードしてパパッとやるだけなので省略します。ちなみに今回使ったSuperColliderのバージョンは3.7.2です。SuperColliderは立派な音響プログラミング環境ですが、ここではその説明はしません。いうより出来ませんので今度勉強会に行ってきます。こんなものを使って何をしようかといいますと、SuperColliderにOSCメッセージを送って音を出してみようということです。今回は簡単のためにSuperColliderに内蔵されているSuperDirtというサンプラー機能を使っていきます。こいつはポート57120番でOSCメッセージを受け付けてくれますのでそこにメッセージを送りつけて音を鳴らすということになります。SuperCollider側の準備こいつはめちゃくちゃ簡単です。Returnキー)してあげるとSuperDirtがインストールされます。インストールされていればこの作業は不要です。IDEを再起動する方がよいかもしれません。Returnキー)するだけです。57120と出てきてSuperDirtが起動します。これで57120番のポートからSuperDirtと通信する準備が出来ました。57120]と出てくるのは、本来この機能はTidalCyclesという環境との連携を考えられているからです。これについても今回は触れないでおきます。次はPython側の準備です。こちらからはOSCメッセージを送信するので、先程参考にしたsimple_client.pyを改造していきます。これさえ送れれば一応音が出るはずです。これについての細かい説明は面倒なので端折ります。time.sleep(1)上のクライアント側コードでまず直さなければならないのはポート番号でしょうか。default=5005から57120に変更します。ローカルでの通信なので127.0.0.1はそのままで。お次はメッセージの中身を変えていきます。/以下の内容をplay2にしたいのですが、これはaddress="filter"の部分を変更するとなんとかなりますね。その後のアーギュメントを変更したいのですが、これは少々の試行錯誤の結果、msg.add_arg()を増やしてあげることでどんどん追加していくことができるようです。time.sleep(1)こうして、simple_client.pyを実行してあげることで見事に音を鳴らすことができました。大した応用ではなかったですかね。エンディング正直これをやって何になるんだという感じではありますが、何か応用できるようにしたいなと思います。未経験大学生によるRuby入門日誌-パート1シェアツイートブックマークLINEこの記事を書いた人Yuki.K1995年生まれ。夢も希望もなくキャンパスを彷徨っていたところ、夢と希望いっぱいのBPS村に引きずり込まれてしまった大学生アルバイト。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。