アルゴリズムはあってるはずなのに何故?!

  LeapMotion で指をトラッキングして、鍵盤を押すとき、どの指を使うか?は、midi チャンネルで指定するようにしてます。


 なので、テストする時にはメインで弾いてる鍵盤の他に、ミニキーボードを準備しといて、C を弾いたら親指、D を弾いたら人差指、E を弾いたら中指が鍵盤を押す、みたいにしてます。


 ところが、鍵盤を押してる間に指の切り替えをミニキーボードから指定すると、鍵盤から手を離した時に、切り替えた指が割り込んで来て、本来鍵盤から離れるはずの指が固定してしまうという謎現象が…


 例えば、親指で鍵盤を押してる時に、指の指定を中指とかにすると、鍵盤から手を離すと、いきなり中指が親指の位置に来て、本来親指がやるはずの動作をやってしまうという…


 たぶん、NoteOff の midi チャンネル指定が上手く行ってないのが原因で、シーケンサーを使って運指をコントロールしてる時には出ない問題のはずなんだけど、気持ち悪いんで修正する事にしました。


 ところが、プログラムをどう眺めても考え方はあってるはずで、なぜ途中で別な指が割り込んで来ちゃうのか半日悩みました。


 で、夜半過ぎにやっと理解できたのが、安いキーボードでは NoteOff イベントは出力されないで、NoteOn の Velocity 0 としてデータが出力されるって事を思い出し、その部分に NoteOn で Velocity 0 ならっていう条件文を加えたら、一気に解決!


 そう言えば、同じ問題で前も悩んでたのでした。


 という事で、次は、指が下に降り過ぎて、鍵盤の中にめり込んじゃうのを回避する部分を作ります。これはコライダーを常に見てて、鍵盤と指先が触れたら、それ以上指が下に下がらないようにすれば良いはず…


 明日は、この問題に挑戦予定です。

このブログの人気の投稿

ラムのラブソングのデモをアップしました

箱根の駒ケ岳が廃墟じゃなかった頃

クラウドファンディングでイベントをやった