Platform SDK: DirectX

IDirectMusicThru::ThruChannel

IDirectMusicThru::ThruChannel メソッドは、キャプチャ ポート上のチャンネルと別のポート上のチャンネル間での転送接続を確立または解除する。

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

パラメータ

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

戻り値

成功すれば 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 で宣言。