この記事は、 SYSKEN Advent Calendar 2018 25日目の記事です
どうも、しるびあです。
クリスマス当日ですが、いかがお過ごしでしょうか。私は、進路が決まって嬉しさを噛み締めています。しかし、事前に組まれた予定を外すことはできず、本記事を書いているわけなのです。
ということで、今回は先日の弥生祭に合わせて製作したステージ照明(LEDだけですが)のコントールシステムについてまとめてみようと思います。
はじめ
弥生祭の4日前のことでした。某fnoくんが動画作品の展示にあたってステージ作りたいと言い出したのです。僕も面白そうなので、これに同調していたら気づいたらLEDをコントロールするためのシステムを作ることになっていました。
システム構成
以下の図のようなシステムになっています。
これを解説して行きます。
OSC(OpenSoundControl
さて、今回のシステムを解説するために欠かせないのが、OSC(OpenSoundControl)です。これは、電子楽器やコンピュータ間で音楽演奏情報をやりとりするための通信プロトコルの一つで、TCP/IP上で動作します。データ形式は次の通りです。
/address data
addressには任意のデータ識別子を、dataには実際のデータを入れます。データは数値や文字列など様々なデータを格納できます。また、このアドレスは次のように入れ子構造にすることもできます。
/address1/address2 data
このように、かなり自由にデータを送ることができます。
このOSCはMIDIの代替となることを意識して策定されていますが、未だ置き換えられている様子はないですよね……。しかし、TCP/IP上で動くという利点は非常に大きく、ネットワークポートとLAN・インターネットなどのネットワークがあればどのようなデバイス間でも通信可能ということです。というわけで、MIDIの代わりにはならなかったけど、メディアアートなどのPCとマイコン間での通信が必要な環境であれば非常に強力なツールになります。
今回のシステムでもこれを用いてクライアントとサーバーを通信させています。
クライアント
クライアントには、webアプリの形式でクロスプラットフォームなアプリが作れるnodeベースのelectronを利用しました。なんだかんだ使いやすいわけです。viewとlogicが分かれているので、viewの部分にはvue.jsを使いました(ギャグとかじゃないよ)。最近vue.jsにはまってこればっかり書いています。おすすめなので、みんな書こう。
過程は省きますが、適当にデザインして、いい感じにロジックを組みました。
ただ、OSCに関するコードをvue.jsで記述してしまい、うまく動作しませんでした。よく考えれば、OSCはアプリ外部とのインターフェースなので、内部のviewに書いてもうまく動作しないのはわかるやろ……ってちょっと経ってから気がつきました。案の定、logicに書いたら一発で動いてやるせない気持ちになっていました。
コードはこちら: https://github.com/Cilvia333/SyskenStageController
サーバー
今回、LEDを駆動するにあたってサーバー兼デジタル出力のできるデバイスとして Raspberry Pi 3 Model B+ を利用しています。ロジックはpythonで書きました。OSC-pythonってライブラリを使ってOSCサーバーを構築しています。ws2812bの駆動にはrpi_ws281xを使いました。
この辺りを使ってほげほげしたら出来上がります。
コードはこちら: https://github.com/Cilvia333/SyskenStageLightingControllerServer
まとめ
ちょっと駆け足になりましたが、これで解説を終わります。
正直なところ、コード見りゃわかるやろって思ってます。なので見て、starつけてください。お願いします。
実は、弥生祭までには完成しなかったんですよね、これ。流石に4日で初めてのelectron&raspberry piは難しかった。まぁ、趣味でやってるVJでも使えそうなので、そのあとも開発をしています。またイベントで出したいなぁと思ってます。
さて、これで今年のSYSKEN Advent Calenderは終わりです。
結構マニアックな記事が増えてくれて僕はとても嬉しいです。僕は多分卒業しますが、来年以降もこの文化が続いてくれるととても嬉しいです。
それではまた
コメントを残す