誰かが 1 つの Performance、1 つの MusicPort で 2 つの midis を読み込んで再生する方法のサンプル コードを提供できますか (midi 1 でチャネル 0-15 を使用し、別のチャネル グループを使用して midi 2 の 0-15 を再生しますか?)セグメントですが、最初の midi が一瞬再生されてから、2 番目の再生のみが再生されます。例が見つかりません。残念ながらうまくいきません。
基本的に私のテストではそうします(いくつかのステップはスキップされますが、デフォルトです)
ポートは Microsoft シンセサイザー
HRESULT hr = S_OK;
DMUS_PORTPARAMS portParams;
ZeroMemory(&portParams, sizeof(DMUS_PORTPARAMS));
portParams.dwSize = sizeof(DMUS_PORTPARAMS);
portParams.dwChannelGroups = 2;
portParams.dwValidParams = DMUS_PORTPARAMS_CHANNELGROUPS;
if (midiPort.dwFlags & DMUS_PC_AUDIOPATH)
portParams.dwFeatures = DMUS_PORT_FEATURE_AUDIOPATH;
portParams.dwEffectFlags = DMUS_EFFECT_REVERB;
if (FAILED(hr = mMusic8->CreatePort(midiPort.guidPort, &portParams, &mMusicPort, NULL)))
return hr;
...
if (FAILED(hr = mPerformance->AddPort(mMusicPort)))
return hr;
if (FAILED(hr = mPerformance->AssignPChannelBlock(0, mMusicPort, 1)))
return hr;
if (FAILED(hr = mPerformance->AssignPChannelBlock(1, mMusicPort, 2)))
return hr;
...
// chan1 is DWORD array 0 to 0xF
mSegment1->SetPChannelsUsed(0x10, chan1);
// chan2 is DWORD array 10 to 0x1F
mSegment2->SetPChannelsUsed(0x10, chan2);
if (FAILED(hr = mSegment1->SetParam(GUID_StandardMIDIFile, 0xFFFFFFFF, 0, 0, NULL)))
return hr;
if (FAILED(hr = mSegment1->Download(mPerformance)))
return hr;
if (FAILED(hr = mSegment2->SetParam(GUID_StandardMIDIFile, 0xFFFFFFFF, 0, 0, NULL)))
return hr;
if (FAILED(hr = mSegment2->Download(mPerformance)))
return hr;
...
if (FAILED(hr = mPerformance->PlaySegment(mSegment1, 0, 0, &segmentState1)))
return hr;
if (FAILED(hr = mPerformance->PlaySegment(mSegment2, 0, 0, &segmentState2)))
return hr;
...