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