で、そのハッカソンで、手振り(指揮の手振り)に応じて音が鳴るものを作ってみたので、少しここで内容を保存しておく。
こんな感じ:
概要
こんな感じ。
我ながら回りくどい面倒な事をしている。なんでこんなに面倒かと言うと、macとC++でMIDIを生成する方法が分からなかったから。。。
- kinectで人物撮影
- openfremeworksのOpenNIプラグインを使って、人体のボーンを取得
- ボーンから手の位置等を取得して領域を作成
- 手を動かして、特定の領域に入ったら、oscでPureDataにデータ生成
- PureDataは受け取ったoscデータを元にMIDI生成
- GarageBandがMIDIを受信して音を鳴らす
kinect
言わずと知れた、本来はXBOXのコントローラ。3/6のkinectハッカソンでは、20人くらいいて、XBOX+kinectで遊んだ事ある人はほとんど居なかった。。。
Xbox 360 Kinect センサー 価格:¥ 14,800(税込) 発売日:2010-11-20 |
openFrameworks + OpenNI
openFrameworksについては、本家サイト参照の事。Processingを何度か触った事があるので、使い方は何となく分かるが、C++という存在故、敷居は高い。。。(画像処理とかごりごりやりたい場合は、openFrameworksを使う事になるのだろうか?)
kinectを使う場合はOpenNIを使うと便利らしいよ、とのこと。これを使えば色やdepthだけでなく、ボーンと呼ばれる、人物を認識して首や腕等のデータを抽出してくれる。という事しか私は知らない。。。きっとそのうち勉強する。
そのOpenNIのopenFrameworksプラグインの導入方法については、http://d.hatena.ne.jp/ke_takahashi/20110107/p1を参照しました。簡単には入ってくれなくて、色々手順が必要です。。。
で、肝心のアプリケーションは、下記の用に領域を分割します。
右手を順番にconduct.TopArea → conduct.BottomArea → conduct.BottomAreaから離す → conduct.RightArea → conduct.TopAreaに動かす事(結局、4拍子っぽい手の動きをします)で「MIDIを出力するために」oscを発行します。。。oscの形式は、
/sound <midi note number>
oscの使い方はhttp://yoppa.org/ma2_10/2279.htmlを参照にしました。
左手をpitch.TopArea, pitch.MiddleArea, pitch.BottomAreaに動かす事で音程(オクターブ)を変えます。
PureData
本家サイト。oscを使うためにはextendedを使う必要があるそうです。内容はopenFrameworksから送られてきたoscをデコードして、midi形式で送り出すだけです。
midiを実際に送り出すためには、Preference -> MIDI Settings からMIDI outをnone以外に選択する必要があるようです(none以外表示されないじゃないか?かも知れませんが、私の場合、文字が一切出てこない選択肢があってそれを選択できるみたい)。Media -> Test Audio and MIDIという項目があるので、これで確認することができます。
見た目とかは、問わないでください。。。。
なんで、わざわざoscを経由してPureDataなのか?という事ですが、書いたように、macでMIDIを生成する方法が分からなかったからです;-)。C++から出力する方法は当然あるようですが、それを読み解く気力がありませんでした。。。まあでもC++で自力で書くと大変そうだし、音のon/offタイミングをうまくするにはスレッドとか考えないといけなさそうなので、それを考えると、こちらの方が楽かと、自分を無理矢理納得させてみた。
GarageBand
少なくとも、私はmacを買った時に付いてきました。新しいプロジェクトを作成して、音源追加(「+」)ボタンをおして、ソフトウェア音源を選択すると、音が鳴るようになりました。これならピアノ以外の音も選べるので便利かと。。。
自己突っ込みと感想
- キラキラ星って4拍子じゃなくて2拍子説?
- 音出すのって難しいよね
- kinectらしさが見当たらない?
- openFrameworks便利(描画が) やはりC++は難敵だ(MSが春に出すSDKに期待するのか・・・?)
- openFrameworksのopenNIプラグインはもう少し改良の余地がありそうな・・・?
- 次機会があったら、画像処理とか取り入れてみたい
0 件のコメント:
コメントを投稿