portmidi-sharpは、当初はmanaged codeでcross platformなMIDIアプリケーションを書けるようにするために、portmidiをP/Invokeするライブラリとして公開することを主目的として作っていた。その後MIDIプレイヤーやMIDIキーボード、仮想MIDIモジュール、音源データベースと、だんだんサンプルコードだったものの役割が大きくなって、再利用の需要も大きくなってきたので(自分しか使っていないけど)、主従を逆転させて、portmidiのバインディングはあくまでおまけという位置づけにして、新しくmanaged-midiというモジュールに再構成した。
新モジュールでは、ライブラリはすべてCommons.Music.Midi.dllに統合される:
- lib/base : SMFの読み書き、音源から独立した(スレッドベースの)MIDIプレイヤー、MidiMachineなど
- lib/module-database : bankなどの音源データベース
- lib/portmidi-sharp : portmidiバインディング
そして各ツールがこれを参照して作られるという構成になる:
- mmk : MIDIキーボード
- bulkdump-managed : バルクダンプツール(-managedは名前が競合しそうなのでつけた)
- managed-midi-player-console : portmidiプレイヤーのexe
- module-database-importer : モジュールDBの取り込みツール。とりあえずdomino用しかない
今回はそれなりに編成されたモジュールになっているのではないだろうか。後はここからCoreCLR用ビルドを作って(PortMidiSharpなどを排除する)、mldspやmugeneから参照するようにする予定だ。まあ必要になってからでいいと思っている。
mugeneのコンパイラエンジンもこのライブラリに取り込もうかと思ったのだけど、まだそこまでsolidな仕様・実装のコンパイラになっていないのと、コンパイラを書き直した方がいいんじゃないかと思っていることがあって、今回は含めないことにした。
Leave a comment