mmk: MIDI keyboard

| No Comments | No TrackBacks

昨日はplayerがbreak throughを得たので、そのまま調子に乗ってもうひとつ予定していた小物アプリを書き上げた。PCのキーボードを利用した仮想MIDIキーボードである。これもportmidi-sharpのリポジトリに入っている。

実は同じ目的のプログラムを大昔にWindows APIベースで書いたことがあるのだけど、ソースもどこかに行ってしまったし今さらMFCのソースを眺める気もしない。その割に、MIDIをいじって打ち込もうとする時には未だに手放せない。世にあるMIDIキーボードツールの大半はマウスでクリックしないと発音できない(どうやって和音を出すというのだろう)。キーボード入力を受け付ける賢いやつは、まあWindowsでしか見たことが無い。

そんなわけで、portmidi-sharpで書き直そうと思っていたのである。

仕組みは大変簡単で、KeyDownしている間だけ、そのキーに割り当てられた音で発音し、KeyUpで消音する。上下矢印キーでオクターブを変更する。出力デバイスと音色だけ変えられればとりあえず実用に堪える。

単純なアプリだが、標準的なUIをもっているというわけではない。ボタンはそれ自身のUIイベントとは無関係にup/downしなければならないし(ボタンにしないという選択は無くもないが)、音色選択やデバイス選択のコンボボックスにフォーカスがある時は、それ自身のキーバインドを有効にしなければならない一方で、ボタンはフォーカスを受け取ると変なUIになってしまう(発音/消音とフォーカスは無関係)。

何で書くかは一寸考えたが、結局winformsで書くことにした。そしたらキーイベントの拾い方ではまるはまる。Formはフォーカスを受け取らないし、キーイベントを消費したことを明示してもなお上下カーソルを押したらフォーカスが移動してしまう(オクターブ上下に使うために使っているのに)。仕方ないのでダミーのTextBoxを用意して、ここでキーイベントを全て受け取るようにして解決した。

こんな風に、Linux環境にも少しずつ打ち込み環境を整えていきたい。

No TrackBacks

TrackBack URL: http://veritas-vos-liberabit.com/noteon/mt-tb.cgi/18

Leave a comment

About this Entry

This page contains a single entry by note on published on May 8, 2009 1:32 PM.

SMF utility library was the previous entry in this blog.

tsukimi build issue is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 4.23-en