IAudioSessionEnumerator 인터페이스(audiopolicy.h)
IAudioSessionEnumerator 인터페이스는 오디오 디바이스의 오디오 세션을 열거합니다. 세션 열거자 개체의 IAudioSessionEnumerator 인터페이스에 대한 참조를 얻으려면 애플리케이션에서 IAudioSessionManager2::GetSessionEnumerator를 호출해야 합니다.
상속
IAudioSessionEnumerator 인터페이스는 IUnknown 인터페이스에서 상속됩니다. IAudioSessionEnumerator 에는 다음과 같은 유형의 멤버도 있습니다.
메서드
IAudioSessionEnumerator 인터페이스에는 이러한 메서드가 있습니다.
IAudioSessionEnumerator::GetCount GetCount 메서드는 오디오 디바이스에서 열려 있는 총 오디오 세션 수를 가져옵니다. |
IAudioSessionEnumerator::GetSession GetSession 메서드는 오디오 세션 번호로 지정된 오디오 세션을 가져옵니다. |
설명
새 세션을 만들 때 애플리케이션에 알림을 표시하려면 IAudioSessionNotification 의 구현을 세션 관리자에 등록해야 합니다. 등록이 성공하면 세션 관리자는 콜백 형식으로 애플리케이션에 세션 만들기 알림을 보냅니다. 이러한 알림에는 새로 만든 세션의 IAudioSessionControl 포인터에 대한 참조가 포함되어 있습니다.
세션 열거자는 각 세션의 IAudioSessionControl 포인터에 대한 참조를 보유하여 현재 세션 목록을 유지 관리합니다. 그러나 세션 열거자는 IAudioSessionNotification을 통해 보고된 새 세션을 인식하지 못할 수 있습니다. 이 경우 애플리케이션은 세션의 일부 목록에만 액세스할 수 있습니다. 이는 세션 열거자가 초기화되기 전에 IAudioSessionControl 포인터(콜백에서)가 해제된 경우에 발생할 수 있습니다. 따라서 애플리케이션이 오디오 엔드포인트에 대한 전체 세션 집합을 원하는 경우 애플리케이션은 자체 목록을 유지해야 합니다.
애플리케이션은 세션 알림을 받고 현재 세션 목록을 관리하려면 다음 단계를 수행해야 합니다.
- UI가 아닌 스레드에서 를 호출
CoInitializeEx(NULL, COINIT_MULTITHREADED)
하여 MTA(다중 스레드 아파트) 모델로 COM을 초기화합니다. MTA가 초기화되지 않은 경우 애플리케이션은 세션 관리자로부터 세션 알림을 받지 않습니다.참고 애플리케이션의 사용자 인터페이스를 실행하는 스레드는 아파트 스레딩 모델을 사용하여 초기화해야 합니다. - 오디오 엔드포인트 디바이스에서 IAudioSessionManager2 인터페이스를 활성화합니다. 매개 변수 iid가 IID_IAudioSessionManager2 설정된 상태에서 IMMDevice::Activate를 호출합니다. 이 호출은 ppInterface 매개 변수에서 세션 관리자의 IAudioSessionManager2 인터페이스에 대한 참조를 수신합니다.
- IAudioSessionNotification 인터페이스를 구현하여 콜백 동작을 제공합니다.
- IAudioSessionManager2::RegisterSessionNotification을 호출하여 애플리케이션의 IAudioSessionNotification 구현을 등록합니다.
- IAudioSessionManager2::GetSessionEnumerator를 호출하여 세션 열거자 개체를 만들고 초기화합니다. 이 메서드는 엔드포인트에 사용할 수 있는 현재 세션 목록을 생성하고 아직 없는 경우 목록의 각 세션에 대한 IAudioSessionControl 포인터를 추가합니다.
- 이전 단계에서 반환된 IAudioSessionEnumerator 인터페이스를 사용하여 세션 목록을 검색하고 열거합니다. IAudioSessionEnumerator::GetSession을 호출하여 각 세션에 대한 세션 제어를 검색할 수 있습니다. 참조 수를 유지하려면 각 세션 컨트롤에 대해 AddRef 를 호출해야 합니다.
- 애플리케이션이 만들기 세션 알림을 받으면 새 세션의 IAudioSessionControl 포인터( IAudioSessionNotification::OnSessionCreated에서 수신됨)를 기존 세션 목록에 추가합니다.
세션 컨트롤은 애플리케이션이 목록의 세션 컨트롤에 대한 참조가 있는 한 유효합니다.
예제
다음 예제 코드에서는 세션 열거자 개체를 만든 다음 세션을 열거하는 방법을 보여 줍니다.
HRESULT EnumSessions(IAudioSessionManager2* pSessionManager)
{
if (!pSessionManager)
{
return E_INVALIDARG;
}
HRESULT hr = S_OK;
int cbSessionCount = 0;
LPWSTR pswSession = NULL;
IAudioSessionEnumerator* pSessionList = NULL;
IAudioSessionControl* pSessionControl = NULL;
// Get the current list of sessions.
CHECK_HR( hr = pSessionManager->GetSessionEnumerator(&pSessionList));
// Get the session count.
CHECK_HR( hr = pSessionList->GetCount(&cbSessionCount));
for (int index = 0 ; index < cbSessionCount ; index++)
{
CoTaskMemFree(pswSession);
SAFE_RELEASE(pSessionControl);
// Get the <n>th session.
CHECK_HR(hr = pSessionList->GetSession(index, &pSessionControl));
CHECK_HR(hr = pSessionControl->GetDisplayName(&pswSession));
wprintf_s(L"Session Name: %s\n", pswSession);
}
done:
CoTaskMemFree(pswSession);
SAFE_RELEASE(pSessionControl);
SAFE_RELEASE(pSessionList);
return hr;
}
요구 사항
지원되는 최소 클라이언트 | Windows 7 [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 R2 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | audiopolicy.h |