2010/12/10

Javaでクロマチックアコーディオンのソフト鍵盤1

思いつきでクロマチックアコーディオンのソフト鍵盤を作ってみようかと思う。すっかりJavaを忘れてしまったので、リハビリという感じ。
クロマチックアコーディオンのキー配列
そもそも、ソフト鍵盤を使ってみようかと思ったら、あまりにも使いにくかったので、パソコンのキーボードで無理なく弾ける入力方法を考えていたら、ボタンがたくさんあるアコーディオンを思い出した。あれってどういう仕組みなのだろうか? 今の時代ネットで検索すればいくらでも出てくる。ローランドのサイトでキー配列を調べた。
http://www.roland.co.jp/VA/index.html
右手側のキー配列は、横には短3度で、右斜め上&左斜め下は半音、左斜め上&右斜め下は1音で5段。キーがレンガ状に配置されているので、パソコンのキーボードに近いものを感じる。これはピアノ鍵盤よりも相性はよさそうだと勝手に判断。それに同じ種類のコードはフォームが変わらないという、ギターと似たような構造が気に入った。

プログラミングスタート
といういことでプログラムにとりかかる。Javaで数時間で完成するかと思ったら甘かった。いろいろ知識が不足していた。それに半年前に覚えたこともすっかり忘れてしまった・・・

仕様としてはクロマチックアコーディオンの5段は実現できないので4段に縮小。横もオリジナルよりは少ないが、ピアノソフト鍵盤よりも音域は広く使える。また、キーの多いJIS配列が、初めてありがたいと思えた。音域がそれなりに稼げるので。

MIDI関係
音は簡単そうなパソコンのMIDI音源を利用しようと思う。まずJavaのMIDI関連のAPI仕様を読むが、さっぱり意味が分からなかった・・・。そもそも他では通用しない専門用語を、他では通用しない専門用語で説明されても分からない・・・ 分からないまま、適当にいじっていたら何とか音が出た。が、実現しようとしてるキーボード入力から音を出すということではまった。というか音を消すほうではまった。GUIのボタンから音を出すほうは、まだマシだったが、完成はしていない。

さらにテストしていてキーボードのハードの問題にもぶつかった。ThinkPad X61を使っているのだが、キーを同時に押すと、ある組合わせによってビープ音が出て入力を拒絶されてしまうというもの。特に隣り合ったキーを3つも押すとかなりの確率でビープ音が出て拒絶。これじゃ使えないじゃん・・・ そこで下の写真の単体キーボード東プレ Realforce PS/2 & USBアダプターを使ったら、この問題は発生しない。でも同時押しはUSBの仕様上、6キーまでしか許可してくれないようだ。ギターと同じ同時発音数なら不満はない。ちなみにPS/2で接続すると押したキーは全部認識されるようだ。恐るべきRealforce。
http://ja.wikipedia.org/wiki/Realforce
それでも普段使っているノートPCで問題発生では作る気が失せてしまった。

GUI関係
ちょっとMIDI関係がイヤになったのでGUIを作り始める。こちらもレイアウトで苦労する。意外とSwingって理解しにくい。面倒に思えたので、柔軟なGUIは捨てて、フレーム固定で作ることにした。大きさが固定されれば、わりと簡単。今日のところは上の絵のようなレイアウトになった。ルック&フィールはNimbusを想定している。ボタンがキレイでプログラムが小さいのがいい。

丸キーのGUIも作ってみた。ボタンではなくJavaによる描画で。アンチエイリアスとグラデーションを使ってNimbus風にしてみた。やはりこっちの方がクロマチックアコーディオンという感じがする。

続きはないかも
とりあえず今日はGUIと、MIDI出力の基礎部分だけを作ったという感じ。完成は遠いいかもしれない。気が向いたら続きをやろうと思う。

つづき
Javaでクロマチックアコーディオンのソフト鍵盤 2