IAudioClient::GetDevicePeriod 메서드(audioclient.h)
GetDevicePeriod 메서드는 엔드포인트 버퍼의 데이터에 대한 오디오 엔진의 연속 처리 패스를 구분하는 주기적 간격의 길이를 검색합니다.
구문
HRESULT GetDevicePeriod(
[out] REFERENCE_TIME *phnsDefaultDevicePeriod,
[out] REFERENCE_TIME *phnsMinimumDevicePeriod
);
매개 변수
[out] phnsDefaultDevicePeriod
메서드가 오디오 엔진에서 주기적 처리 패스 사이의 기본 간격을 지정하는 시간 값을 작성하는 REFERENCE_TIME 변수에 대한 포인터입니다. 시간은 100나노초 단위로 표현됩니다. REFERENCE_TIME 대한 자세한 내용은 Windows SDK 설명서를 참조하세요.
[out] phnsMinimumDevicePeriod
메서드가 오디오 엔드포인트 디바이스에서 주기적 처리 패스 사이의 최소 간격을 지정하는 시간 값을 작성하는 REFERENCE_TIME 변수에 대한 포인터입니다. 시간은 100나노초 단위로 표현됩니다.
반환 값
메서드가 성공하면 S_OK가 반환되고, 실패할 경우 가능한 반환 코드에는 다음 표에 표시된 값이 포함되지만 이에 국한되지는 않습니다.
반환 코드 | 설명 |
---|---|
|
오디오 엔드포인트 디바이스가 분리되었거나 오디오 하드웨어 또는 관련 하드웨어 리소스가 다시 구성, 비활성화, 제거 또는 사용할 수 없게 되었습니다. |
|
Windows 오디오 서비스가 실행되고 있지 않습니다. |
|
phnsDefaultDevicePeriod 및 phnsMinimumDevicePeriod 매개 변수는 모두 NULL입니다. |
설명
클라이언트는 IAudioClient::Initialize 메서드를 호출하기 전에 이 메서드를 호출할 수 있습니다.
phnsDefaultDevicePeriod 매개 변수는 공유 모드 스트림의 기본 예약 기간을 지정합니다. phnsMinimumDevicePeriod 매개 변수는 단독 모드 스트림의 최소 일정 기간을 지정합니다.
두 매개 변수 중 하나 이상인 phnsDefaultDevicePeriod 및 phnsMinimumDevicePeriod는 NULL 이 아니어야 합니다. 그렇지 않으면 메서드가 오류 코드 E_POINTER 즉시 반환됩니다. 두 매개 변수가 모두 NULL이 아닌 경우 메서드는 기본 기간과 최소 기간을 모두 출력합니다.
공유 모드 스트림의 경우 오디오 엔진은 엔드포인트 버퍼의 데이터를 주기적으로 처리하며, 이 데이터는 엔진이 클라이언트 애플리케이션과 공유합니다. 엔진은 이러한 처리 패스를 정기적으로 수행하도록 자체적으로 예약합니다.
오디오 엔진에서 전달하는 처리 사이의 기간은 특정 오디오 엔드포인트 디바이스에 대해 고정되며 오디오 엔진에 대한 가장 작은 처리 양자를 나타냅니다. 이 기간과 버퍼와 엔드포인트 디바이스 간의 스트림 대기 시간은 오디오 애플리케이션이 달성할 수 있는 최소 대기 시간을 나타냅니다.
클라이언트에는 오디오 엔진과 동일한 시간 간격으로 실행되도록 주기적인 처리 스레드를 예약할 수 있습니다. 이러한 방식으로 클라이언트는 공유 모드 스트림에 대해 가능한 가장 작은 대기 시간을 달성할 수 있습니다. 그러나 대기 시간이 덜 중요한 애플리케이션에서 클라이언트는 처리 패스를 덜 자주 발생하도록 예약하여 CPU의 프로세스 전환 오버헤드를 줄일 수 있습니다. 이 경우 처리 패스 간의 더 긴 기간을 보상하려면 엔드포인트 버퍼가 비례적으로 커야 합니다.
클라이언트는 IAudioClient::Initialize 메서드를 호출하는 동안 버퍼 크기를 결정합니다. 공유 모드 스트림의 경우 클라이언트가 이 메서드에 hnsBufferDuration 매개 변수 값 0을 전달하는 경우 메서드는 클라이언트 및 오디오 엔진의 마침표가 같도록 보장되고 메서드가 가능한 최소 대기 시간을 달성할 수 있을 만큼 작은 버퍼를 할당한다고 가정합니다. (실제로 0 사이의 hnsBufferDuration 값과 오디오 엔진의 기간 및 디바이스 대기 시간의 합계는 동일한 결과를 갖습니다.) 마찬가지로 단독 모드 스트림의 경우 클라이언트가 hnsBufferDuration 을 0으로 설정하면 메서드는 클라이언트 기간이 오디오 엔드포인트 디바이스의 최소 기간으로 설정되고 메서드가 가능한 최소 대기 시간을 달성할 수 있을 만큼 작은 버퍼를 할당한다고 가정합니다.
클라이언트가 주기적 처리 스레드를 덜 자주 실행하도록 선택하는 경우 대기 시간 증가의 비용으로 IAudioClient::Initialize 호출 중에 엔드포인트 버퍼를 만드는 한 충분히 큰 작업을 수행할 수 있습니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | audioclient.h |