MIDI メッセージを出力する C++ コードを書いています。ステレオで動作させるには、これが必要です。これにより、一部の音は左チャンネル/スピーカーから再生され、他の音は右から再生されます。midiOutSetVolume(midiOutHandle, 0xFFFF) を呼び出し、続いて midiOutShortMsg を数百ミリ秒間隔で複数回呼び出すと、ノートは左側のスピーカーから聞こえます。同様に、midiOutShortMsg を呼び出す前に最初に midiOutSetVolume(midiOutHandle, 0xFFFF0000) を呼び出すと、すべてが正しいスピーカーから出力されます。ただし、次のようにして、左のスピーカーから 1 つのノートを出力し、右のスピーカーから 1 つのノートを同時に出力しようとすると、次のようになります。
midiOutSetVolume(midiOutHandle, 0xFFFF);
midiOutShortMsg(...);
midiOutSetVolume(midiOutHandle, 0xFFFF0000);
midiOutShortMsg(...);
どちらの音も右のスピーカーから出てきます。デバイスに 2 つの別個のハンドルがあれば、1 つを左チャンネルのノートを再生するように設定し、もう 1 つを右チャンネルのノートを再生するように設定できると考えました。ただし、midiOutOpen を 2 回呼び出して同じデバイスへの 2 つのハンドルを開こうとすると、2 回目の呼び出しで MMSYSERR_ALLOCATED エラーが発生します。
アドバイスをいただければ幸いです。