カテゴリー別アーカイブ: 組込みLinux

MIDI to OSC Deviceの試作とUnityを用いたVJについて 6 (まとめ)

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて書きました。やっつけで作るとまとめが大変だとわかりました。書いてるうちに渋谷2.5Dでも少しVJしました。

まとめ

ハードからPCまで、雑ですが構造だけ書いた感じです。

今後の課題

今のところ、VJソフトが付け焼き刃ですので、もっと色んなモデルやシェーダを作り、Unityを活かしたいと思っています。(Linuxの開発環境マジでおねがいします!)
また、操作性が非常に悪いので、そのへんも課題です。どうせなら操作もOSCかNIDでやりたいな。タブレットのマルチタッチをOSCで送るとかも便利そう。
また、デバイス側ですが、かなり処理能力的に余裕があると思っていて、様々な発展が可能と目論んでいます。BeagleBoneBlackはRaspberry PiやArduinoより遙かに重い処理が回せるはずです。
例えばKinect,XtionなどのNIDでモーションキャプチャしてOSCに乗せて飛ばすとか。実はUnityからOpenNIを呼んだVJはすでにやったことがあるのですが、OpenNIがARM対応したことですし、今後無線化してみたいと思います。

Demo

今回使用した1シーンをUnity Web Player向けにビルドしてみました。
キーボードの数字キーでなんか飛び出します。MIDIのNoteOnの代わりと思ってください。GUI領域のスライダで回転スピードが変わります。って全然MIDIのデモになりませんが、ご了承ください。。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 4

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて、何回かに分けてまとめていきます。

MIDI→OSC変換基板の筐体製作と小型WiFiルータと組み合わせた遠隔操作

前回まででデバイスの機能は実装できましたが、ライブで使用するには色々と詰めが必要でした。

MIDI→OSC変換基板の筐体製作

まずなんといっても、最初は基板むき出しの配線モジャモジャです。少なくてもカバンにつっこめる程度のハウジングが必要です。コネクタも固定して、MIDIのDIN5端子の挿抜に耐えられなければいけません。
midicast_housing
そこで、αの所有する3Dプリンタでハウジングを印刷することにしました。モデリングはあまり経験がなかったので、まずはモデリングソフトに慣れるところから、という感じでした。Google sketchupとAutodesk 123D Designが候補ですが、検討の結果Sketchupを使用しました。理由としては、以前に少しだけいじったことがあることと、DAE出力ができ、Unityにモデルをインポート可能なこと、ギャラリーが充実していることが挙げられます。
コネクタ穴を開けただけの簡単な箱を作って、αに印刷を依頼しました。当初素材にABSを使用しましたが、反りが激しく失敗しまし、PLA樹脂を購入して再挑戦したところ、無事印刷が出来ました。
PLA樹脂はコネクタを取り付けるネジもなんとか止まる程度に硬度があり、なかなか便利そうです。基板からコネクタまでの配線などの都合でわりと大きめの箱になってしまったところは今後の改善点ですが、持ち運びや端子挿抜はできるようになりました。

小型WiFiルータ周りのあれこれ

ライブでの使用を想定すると、無線LANでの運用は必須です。製作初期には有線LANで試験していましたが、無線化するところで色々ハマりました。
まず、有線LANではOSCメッセージを255.255.255.255に投げていたのですが、無線にしてみると急にパケット落ちが激しくなることがわかりました。最初は無線が不安定なのかと思いましたが、試しにユニキャストにしてみると問題なく送信できました。最近のネットワーク機器は頭がいいんですねー。仕方ないので、引数で指定した複数のIPに投げるように仕様変更しました。
しかしここで問題が発生しました。メンバーのIPをすべて固定にするのは面倒なので、DHCPを使いたいのですが、ルーターで割り振るIP範囲を指定する機能がないのです。またもや仕方ないので、小型ルーターMZK-RP150Nを買いました。ポイントは

  • DHCPサーバーが割り振るIP範囲を指定できる
  • ルータ、アクセスポイント、コンバータの3モードがある
  • アクセスポイント間通信または無線リピータ機能がある
  • USB給電可能

の4点です。これであらゆる配置やネットワーク構成に対応できると思っています。
midicast_wdsap
渋谷WWWに来ていただいた方は見た通り、今回はVJ部屋が別部屋になっていたので、さらに同じルーターをもう一つ使ってリピータを用意しておきました。小型USB充電器と合わせたり、モバイルバッテリーと組み合わせてどこでもWifi範囲を拡張できます。
こうして、かなりの広範囲でOSCを送受信出来る環境が整いました。

BeagleBone Black遠隔操作のあれこれ

デバッグなどの都合上、Wifi経由のSSHでBBBにログインして遠隔操作することが多くなりますが、無線を使用すると特に接続が不安定になりがちです。そして、ふつうにSSHから起動したプロセスは、接続が一時的に切れるだけで終了してしまいます。これは致命的な問題になります。
当初はBBBのGUIにVNCでアクセスすることも考えましたが、帯域を圧迫するしGUIは必要ありません。こういう場合はscreenコマンドで仮想端末を作ると良いです。この解説がドンピシャです。SSHしたらとりあえずscreenする癖をつけると、起動したプロセスに再接続できるようになります。

クラブやライブ会場は、リハで初めて現場環境がわかる事が多く、こういったインフラ周りは重要かつ苦労するポイントだと思います。
次回はようやくこのデバイスとUnityを使ってOSCを受信してみます。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 3

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて、何回かに分けてまとめていきます。

AVR100円マイコンと小型LinuxボードによるMIDI→OSC変換 (後半)

前回が長くなっちゃったので、続きです。

BeagleBone BlackのセットアップとUART受信

前回の通り、メインの処理はBBBを使います。BBBはARMコア(Cortex-A8)の1GHzCPUが載っていて、Amazonで一式6000円弱で買える素晴らしいLinuxボードです。ただしHDMIの挙動はちょっと怪しいのですが、VNCとかでLAN上から覗いたり、そもそもコンソールしか使わない場合は関係ないのでよしとします。
買ったままでも内蔵フラッシュからAngstrom Linuxが起動しますが、今回はmicroSDから使い慣れたubuntuをブートしてみました。詳しい事は省略しますが、このページからPrebuildイメージを落としてSDに焼いて、ボタンを押しながら電源を入れてSDからbootする事を確認、ネットワークなどの設定を済ませて、ssh等で確実にログイン出来るかチェックします。
大丈夫そうなら、デフォルトでSDからbootするようにします。BBBをPCにUSB接続すると内蔵フラッシュのbootパーティションが見えるので 内蔵フラッシュのbootパーティションにSDのbootパーティションの内容をコピーします。
今回、UARTを3本使いたいので、起動時にpin functionの設定を変更します。ここを参考に、UARTを有効にするスクリプトをupdate-rc.dで登録します。ついでにstty -F /dev/ttyO1 38400とか書いて、Baud rateを今回使いたいものにしておきます(あとでプログラム上から設定するので別になくてもいいですが)。
これでやっとUART3本をLinux上からいじれるようになったはず!前回のAVRマイコン基板を挿して、MIDI機器を繋いでみます。sudo hexdump /dev/ttyO1してみると何やらつらつらと表示されてる!わーい!

BeagleBone BlackによるOSCの送信

もはや誰向けの記事なのかわかんなくなっていますが、ここまででデバイスの土台は完成です。続いて機能の実装に入ります。Linux用のプログラムを書くわけですが、目的はUARTの受信とOSCの送信です。それなりに単純なので、C言語で実装しました。
ここからは結構世の中に情報があると思います。UARTについてはtermios.hを用いてシリアルポートを操作します。このへんのページが参考になるでしょうか。O_NOCTTYでopenしてcfsetispeedでB38400とか適当に設定します。
OSCについては、libloをapt-getで入れて使います。この方が解説してくれています。というか、libloは使いやすいライブラリなので、公式ドキュメントを見ればだいたい使い方がわかるかと思います(雑)。PCでOSCの受信確認ができるソフトは沢山あります。せっかくなのでProcessing製のOSCモニタとか使って動作を確認しながら書くと便利です。
BBB用のクロスコンパイル環境を作る方法もいろいろ紹介されていますが、簡単なものなら実機上でgcc main.c -lloでもいいでしょう。本格的に書く場合はLinux機またはVirtualBox上のEclipseがいいと思います。その辺はググればなんとかなります。と言いつつ、実は自分は既存の開発環境と競合してうまくいきませんでしたが。
MIDIデバイスからのバイナリデータをそのまま1バイトずつintとしてOSCで送信すれば、MaxでMIDI parseできるようです。ただ他のプログラムからは読みにくいので、ちゃんと1つのMIDIメッセージを1つのOSCメッセージとして送ってみました。帯域的にはかなり余裕があるので、両方の形式で送り、OSCパスでフィルタできるようにしました。また、プログラム自体は引数で与えたUART1ポートのみ処理するようにしました。このプログラムを複数プロセスで同時に起動して、複数ポートに対応します。起動用スクリプトは前述のOS起動時のスクリプトに追加して、デバイスの電源ONで自動実行する事もできます。
最終的なソースはそのうち公開しますが、ここまでで一応所望のMIDI→OSC変換が出来ました。次回は運用周りのTipsとハウジングの3Dプリントについてまとめます。Unity目当ての方は期待せずにもう少しお待ち下さい。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 2

2013.11.04りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJの技術的なことについて、何回かに分けてまとめていきます。

AVR100円マイコンと小型LinuxボードによるMIDI→OSC変換 (前半)

AZUMAさんのライブといえば、両手両足で楽器を操る演奏が見どころです。りんご飴音楽祭では口まで使ってましたね。知らない人はこれ見てください。
この演奏情報(MIDI)をVJに利用したいなーと思ったのですが、普通ステージとVJブースは離れてるし、MIDIを無線化するデバイスは思ったより世の中に無いらしい。という訳で、他メンバーが使ってるMax等で扱いやすく、無線化が容易なOSCでVJに届けよう!と思い立ち、デバイスを自作してみました。

システム概要

とりあえず、MIDI信号の仕様を見てみると、中途半端なBaud rateのUARTだということがわかってきたので、適当なマイコンで受信するのは簡単そうだと思い、メインとなるボードをどうするか考えました。候補としては、下記のようなものが挙げられます。

流行のArduino系は独特の生態系で僕には逆に取っ付きづらいのと、非力な割に周辺機器を考えると意外と高価なので今回も手を出しませんでした。そうなるとメジャーどころはRPiですが、RPiとBBB(注:BeagleBoneBlackね。DJじゃないよ!)だと後者の方がだいぶ高スペックで、IOピンが非常に沢山使えます。情報は少ないですが。しかも、MIDIをすぐに受信できそうなUARTがデバッグシリアルとは別ピンで3本も出ています。
というわけで、結論としてはマイコンでMIDI→UART変換してBBBにつっこみ、BBBでOSC変換してEthernetに流すことに決めました。

MIDI信号のBaudRate変換

まずはMIDI側から作っていくことにしました。BBBのLinuxの設定を書き換えて再ビルドすれば直接MIDI信号を受信できそうですが、後々アップデートするときに面倒そうだし、BBBは他のことにも使いたいので、外部基板で変換を行います。
以前遊んだことのあるAVRマイコンで作ろうと思ったのですが、調べてみるとMIDI→USBインターフェースを作ってる方がいたり、MIDIUART変換を作ってる方がいました。今回はUART3本を並列に受信できるBBBを使おうと考えていたので、BBBの貴重なUSBの帯域を使わなくても、上記のMIDI→UART変換プログラムを焼けばそのまま使えそうです。回路図も公開してくださっているので、MIDI受信のフォトカプラ周りの作り方も参考にさせていただきました。というか、ほとんどそのままです。

midicast_board

AVRマイコンとしては、上記の方も使っているTiny2313は秋月電子で100円で売っているので、使わない手はないでしょう。千石で探しまわって買ったMIDIのDIN5ピンコネクタのほうがよっぽど高くつきました。しかも一応MIDI THRUもつけたので、6個必要でした。フォトカプラも以前秋月で買ったPC900Vを使いました。クリスタルは1個だけつけて、他2つのAVRは外部クロックにしています。もちろん謎の8分周もなしです。この辺のヒューズビットの設定は間違えるとヤバいので気をつけましょう。
回路もプログラムもそのままですし、以前遊んでいたAVRライタもあったので、3チャンネルMIDI→UART変換基板は難なくできました。ハンダ付けは得意じゃないので、そのへんの難はありましたが。
ちなみに電源はBBBから供給していますが、おそらくこの電源供給によってUSBの動作が不安定なので、後々別電源に変えようと考えてます。試行錯誤の結果配線もぐちゃぐちゃなので、もっと綺麗に作り直したい!

本当はBBBの中身も書く予定でしたが、長くなっちゃったので次回にします。


MIDI to OSC Deviceの試作とUnityを用いたVJについて 1

2013.11.04に行われた、りんご飴音楽祭@渋谷WWWでのAZUMA HITOMIさんのVJを担当させていただきましたが、今回新たに導入したデバイスなどの技術的なことについて、何回かに分けてまとめていきます。
項目としては、以下の様な内容にしようと思っています。

  • AVR100円マイコンと小型LinuxボードによるMIDI→OSC変換
    • AVRの100円マイコンを用いたMIDI to UART変換基板と、ARMコアを搭載したLinuxボードであるBeagleBone Blackを組み合わせて、MIDI情報をOSCに変換してEthernetで送信できるようにしました。
  • MIDI→OSC変換基板の筐体製作と小型WiFiルータと組み合わせた遠隔操作
    • MIDIの演奏者からOSC利用者(VJ)までの細かいインフラ等について、意外と難点が多かった!
  • 3DゲームエンジンUnityでのOSC受信処理とVJへの応用
    • UnityでのOSC受信と、Unityを無理やりVJに利用する際にとった苦肉の策についてまとめます。誰かがもっと良いやり方を教えてくれることを願いつつ。。