Platform SDK: DirectX |
IDirectMusicThru::ThruChannel メソッドは、キャプチャ ポート上のチャンネルと別のポート上のチャンネル間での転送接続を確立または解除する。
HRESULT ThruChannel( DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort );
成功すれば S_OK を返す。
失敗すれば次のエラー値のいずれかを返す。
E_NOTIMPL |
E_INVALIDARG |
DMUS_E_PORT_NOT_RENDER |
システム エクスクルーシブ メッセージは、転送先ポートに送信されない。
Microsoft Software Synthesizer または一定の遅延時間を持たないその他のシンセサイザへの転送は推奨されない。転送は、受信 MIDI イベントを受け取ると即座に行われる。ソフトウェア シンセサイザの遅延時間が比較的長いこと (ハードウェア ポートと比べた場合)、およびソフトウェア シンセサイザは複数のオーディオ ブロックを同時にレンダリングすることから、各イベントには演奏の前にわずかな遅延が発生する。この遅延の長さは、一定していない。このランダムなオフセットは、データの再生時にジッタとして発生する。その他のデバイス (MPU-401 ポートなど) の遅延時間はわずかであるため、ジッタは発生しない。
アプリケーションがソフトウェア シンセサイザに対してデータを転送する必要がある場合、受信ノート イベントのタイム スタンプにわずかなオフセットを追加して、シンセサイザのレンダリング遅延時間を補正しなければならない。
次のサンプル コードでは、IDirectMusicThru インターフェイスを取得し、キャプチャ ポートのグループ 1 上のすべてのチャンネルと、転送先ポート上の同等のチャンネルとの間で転送接続を確立する。
HRESULT SetupOneToOneThru( IDirectMusicPort *pCapturePort, IDirectMusicPort *pRenderPort) { HRESULT hr; IDirectMusicThru *pThru; hr = pCapturePort->QueryInterface(IID_IDirectMusicThru, (void**)&pThru); if (FAILED(hr)) return hr; for (DWORD dwChannel = 0; dwChannel < 16; dwChannel++) { hr = pThru->ThruChannel(1, dwChannel, 1, dwChannel, pRenderPort); if (FAILED(hr)) break; } pThru->Release(); return hr; }
Windows NT/2000 : Windows 2000 が必要。
Windows 95/98 : Windows 95 以降が必要。Windows 95 用に再配布可能な形で使用可能。
ヘッダー : dmusicc.h で宣言。