次の方法で共有


遅延時間の短縮

DirectMusic の遅延時間は、システム依存遅延時間と遅延時間パディングという 2 つの主要なコンポーネントで構成されている。

システム依存遅延時間は、特定のシステム構成に対して必要な専攻書き込みデータの最低量を見積もることで動的に計算される。この動作は自動的に行われ、アプリケーションでは制御できない。システム依存遅延時間の絶対的な最小値は 4 ミリ秒である。

遅延時間パディングの範囲は 0 ~ 100 ミリ秒で、アプリケーションによって構成できる。この値は、システム依存遅延時間に追加されて、突発的な問題の緩和に使用される場合がある。旧システムとの最大限の互換性を保証するため、遅延時間パディングはデフォルトで 55 ミリ秒に設定されている。ほとんどのアプリケーションでは、遅延時間パディングを長くする必要はない。

遅延時間パディングを短くすれば、遅延時間が短い最近のハードウェアの能力を利用できる。ただし、遅延時間を短くすると、システムによっては突発的問題が発生する危険がある。遅延時間を可能な限り短くする必要のあるアプリケーションでのみ、遅延時間パディングの値を小さくする必要がある。

遅延時間パディングの値の変更は、ポートの GUID_DMUS_PROP_WriteLatency プロパティを設定することで行う。次のサンプル コードは、このプロパティの使い方を示している。

HRESULT SetLatency (IDirectMusicPort8 *pDMPort, DWORD dwLatency)
{
    IKsControl* pKSControl;
    HRESULT hr;

    // IKsControl を照会する。プロパティをサポートするすべてのポートは、このインターフェイスを提供する。
    hr = pDMPort->QueryInterface(IID_IKsControl, (void**)&pKSControl);
    if (SUCCEEDED(hr)) {
        KSPROPERTY KSProperty;
        ULONG      ulDummy;
        ZeroMemory(&KSProperty, sizeof(KSProperty));
        KSProperty.Set   = GUID_DMUS_PROP_WriteLatency;
        KSProperty.Flags = KSPROPERTY_TYPE_SET;
        hr = pKSControl->KsProperty(&KSProperty, sizeof(KSProperty),
                (LPVOID)&dwLatency, sizeof(dwLatency), &ulDummy);
        pKSControl->Release();
    }
    return hr;
}

最小の遅延時間を実際に設定するには、アプリケーションで DirectMusic リアルタイム スレッドの起動間隔も短くする必要がある。この指定は、ポートの GUID_DMUS_PROP_WritePeriod プロパティを設定することで行う。

参照