DirectMusic DirectMusic 의 사용법 사운드의 재생 타이밍 지연 시간의 단축   [목차열람] [주소복사] [슬롯비우기]
지연 시간의 단축
 
Microsoft DirectX 9.0

지연 시간의 단축

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 리얼타임 thread의 기동 간격도 짧게 할 필요가 있다. 이 지정은, 포트의 GUID_DMUS_PROP_WritePeriod 프로퍼티를 설정하는 것으로 실시한다.

참조

↑TOP