ものがたり(旧)

atsushieno.hatenablog.com に続く

クロマトーンを作ってみた

id:yaneurao:20090524:p1 のコメント欄で紹介されていたクロマトーンが何やら面白そうだったので、(iPhoneアプリではないけど)ちょうど最近portmidiのC#バインディングのサンプルで作っていたMIDIキーボードアプリを、ちょこちょこと書き換えて作ってみた。ついでにアーカイブにしてうpしてみた。
http://github.com/atsushieno/portmidi-sharp/downloads

mmk.exeがピアノライクなキーボード、mmchromakey.exeがクロマトーンライクなキーボードになっています。

portmidiについては、Windows用のdll, OS X用のdylib, あとopensuse上でビルドしたsoが一緒に入っています。ソースからビルドしないと動かない場合は上記githubリポジトリにportmidiの環境別autotoolizeパッチがあるので、それを適用して適当にビルドすればP/Invokeできるdynamic libraryが出来るはず。(てか、どういうことかというと、dynamic libraryはportmidiではビルドされないわけです。困ったことに。)

ダミーのテキストボックスにフォーカスがある時だけ発音します(.NETとmonoのwinformsのキーの扱いが微妙に違っていたので問題が起こらない方法にした)。上下キーでオクターブ変更。困ったことにたぶんJP106専用で、おまけにどうもmono/Linuxだとキーマッピングがおかしいようです(monoのバグ)。USキーボード対応は、したいのですが(そうでないと使ってもらえないし)、手元に無いので、面倒がって対応が遅れる可能性は少なからずあります。そして設定で切り替える以外の対応方法が思いつかない…(winformsなんて普段いじらないので)。monoで使えるAPIで何かありますかねえ。

あと音階が表示されないのでちと使いにくいな。まあその辺はサンプルだしC#のソースを書き換えてみて下さい。気が向いたらまたいろいろいじります。

追記: どうやらWindows上だとportmidi.dllとporttime.dllに妙な依存があって動作しないみたい。これらのファイルのコピーをportmidi-0.dll / porttime-0.dll として作ると動くようになるはずです。cygwinのlibtoolまわりで失敗しているみたい。あと-target:winexeでビルドしていませんので、どうしても気になる人は自分でMakefile上で-target:winexeを追加してビルドしてみてください。