遅延時間の短縮
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 プロパティを設定することで行う。
参照