[WIP]Leap MotionとRubyで遊ぶ
↑ leap motionのデモアプリで遊んでいる図
今年の2月にorderしたLeap Motionが先日(7/21)届いたので、
ここ数日アプリをダウンロードしたりして遊んでいる。
(長時間姿勢を維持する必要があるアプリは結構疲れる)
せっかくなので自分でも何か作ろうと思ってDeveloperページを見ると、
今のところ公式にSDKが存在するのは
- C++
- Java
- Python
- C# and Unity
- JavaScript
の5つ(6つ?)で、残念ながらRubyのSDKは無かった。
ということで、以下Leap MotionをRubyで使うためにやったことの雑記
gemを探す
ちょっと探したところ、
glejeune/ruby-leap-motion "Ruby interface to the Leap Motion Controller"
というのを見つけた。最終更新が2ヶ月前なので最新のSDKには対応していないのかもしれないけど、とりあえずこれを使ってみた
SWIG?
このruby-leap-motion
はSWIG
というのを使っているらしかった。
SWIG - Wikipedia
SWIG (Simplified Wrapper and Interface Generator) は、 C/C++ で書かれたプログラムやライブラリを、Tcl/Tk、Perl、Python、Ruby、PHP、Lua などのスクリプト言語や、Java、C#、Scheme、Ocaml などの言語に接続するためのオープンソースのツールである。ruby-leap-motion/ext/swig/Leap.i at master · glejeune/ruby-leap-motion
にはRuby用の設定が含まれているけど、最新のSDKの中のLeap.i
には無かった。glejeuneさんが自分で追加したのだろうか。とりあえず今は保留。
座標を取得
とりあえず何らかの座標が取得できないと始まらないので(ジェスチャー認識もあるけど)、
ruby-leap-motion/ext/swig/Leap.i at master · glejeune/ruby-leap-motion
これを見て試行錯誤して、指先の座標を取得することができた。
テルミンつくろう
画面を描写するのは大変そうだし、音だけ出ればいいやと思ってテルミン作ることにした。
先人↓
テルミンの演奏法を調べる
右手を右に移動させると音が高くなって、左手を上に移動させると音が大きくなるらしい
@fukayatsu 青山テルミン!... 何でもありません。
— dopin (@dopingoo) July 24, 2013
どうやって音鳴らそう?
Windowsならbeepとか使えた気がするけど、Macで音を出すプログラム書いた事なかったので困った。
ちょっと調べて↑これを使わせてもらうことにした。
とりあえず動くようにした
SDKを~/Development/LeapSDK
に置いた場合はこんな感じで実行できるかもしれない(※後述)↓
$ git clone git@github.com:fukayatsu/leap-motion-sandbox.git $ cd leap-motion-sandbox $ bundle config build.leap-motion --with-leap-lib=~/Development/LeapSDK/lib --with-leap-include=~/Development/LeapSDK/include $ bundle $ bundle exec ruby theremin.rb
既知の問題
- 音程が変わるときに音がブツブツ切れる
- この辺 の処理が必要かも
- しばらく動かすと、
[FATAL] failed to allocate memory
で落ちる - なぜか
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-darwin12.3.0]
でしかbundle
が成功しない- むしろなぜp195で成功したのか...
今後について
[FATAL] failed to allocate memory
の原因を探る- bundleの検証
- Core Audioをもう少し深堀りする
- PythonのSDKを試してみる