Windows上でMIDI Outデバイスに見えるタイプのソフトシンセは廃れてしまったのだけれど、DominoとかCherryとかの純粋なMIDIシーケンサから仮想MIDIケーブルを経由してVSTホストアプリに繋げて音を鳴らすことはできるようである。
この仮想MIDIケーブルってどうやって実現しているのかを調べているのだけれど、なかなか情報に行き着かない。
仮想MIDIケーブルの仕組みがわかれば、自作のVSTホストアプリをMIDI Outポートとして認識させることができるようになり、Dominoとかから簡単に操作できるとおもうのだけれど。MIDI Outポートとしてアプリから見えるようにするにはどうしたらよいかとかいう線で調査したほうが良いのかな。まあなんにせよこのあたりに詳しくなりたいところなのだが。twsynthもMIDIデバイスに見えるようなので少しソースを追ってみる。するとwindrvフォルダというのがありこの中にドライバのコードがあった。mmddk.hとかをインクルードしているのでWindows Driver Kitが必要なのかな。
話は変わるけど朝の電車の中でWrapper Library for Windows MIDI APIのCMIDIInDeviceのソースコードを見ていた。CMIDIInDeviceがデバイスラッパでデータをCMIDIReceiverの継承クラスが受ける。わからないのはロング・メッセージのところ。ワーカースレッドを動かしてMIDIHDRのコンテナを適宜削除しているのだけれどこの処理が何を意味しているのかよくわからない(CMIDIInDevice::HeaderProc())。システム・エクスクルーシブを受信するためのお作法なのだろうか。MIDIHDRに関連するAPI(midiInPrepareHeader・midiInAddBuffer・midiInUnprepareHeader)を少し調べるとバッファの事前確保・追加・解放のAPIのようだ。大量のデータを受けきるためのものだろうか。具体的な解説がないのでよくわからない。もう少し調べてみることにしよう。