Microsoft DirectX 8.0 (C++)

IDirectMusicThru8::ThruChannel

キャプチャ ポート上のチャンネルと別のポート上のチャンネル間での転送接続を確立または解除する。

HRESULT ThruChannel(
  DWORD dwSourceChannelGroup, 
  DWORD dwSourceChannel, 
  DWORD dwDestinationChannelGroup,
  DWORD dwDestinationChannel,
  LPDIRECTMUSICPORT pDestinationPort
);

パラメータ

dwSourceChannelGroup
キャプチャ ポート上のチャンネル グループ。この値は常に 1 である。
dwSourceChannel
ソース チャンネル。
dwDestinationChannelGroup
転送先ポート上のチャンネル グループ。
dwDestinationChannel
転送先チャンネル。
pDestinationPort
転送先チャンネルの IDirectMusicPort8 インターフェイスのアドレス。この値を NULL に設定すると、既存の転送接続が解除される。

戻り値

成功した場合は 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 で宣言。