MMLコンパイラが何となく落ち着いたような気分になったので、実際の打ち込みに使えるような音色エディタを作ろうと思っている。そこで初めて気付いたのだけど、音色エディタを作るなら、音色名リストがほしい。ネットで探せば有名どころの音源モジュールの音色リストはすぐ見つかるのだけど、どうせならバルクダンプで音色名リストが取れたりしないものかと思って、試しにプログラムを書いてみることにした。
基本的には、バルクダンプのためのエクスクルーシブを発行して、それからMIDI INポートで段部データのエクスクルーシブを受信すればいい。というわけで、そのようなコードを書いてみたのだけど、どうも受信が上手くいかなかった。それで、portmidiのCで書かれたサンプルを見て、初めて、API(Cのヘッダ)をもとに作成したP/Invokeバインディングではどうもだめらしいということに気付いた。バイト列としてのMIDI INメッセージの受信に適合していなかったというわけだ。というかportmidi.hがおかしいと思うんだけど...
なにぶん初めてINポートをいじったものだから、P/Invokeがまずいのか、portmidiが悪いのか、バルクダンプのやり方がまずいのか、そもそもケーブルの接続がまずいのか...といろいろ検証するのに時間がかかった。が、とりあえず受信は出来るようになった。ただ、受信したバッファの内容がどうにもおかしい。後の操作でバッファを上書きされているように見える。P/Invokeまわりはいろいろトラップがあるので、後でじっくり検証する必要がある。少なくともこれが動かないと、音色リストが生成できない。まあ生成できなくても、拾ってくればいいのだけど...
bulkdump (PortMidiSharp.csおよびSMF.csが必要)
Leave a comment