다음을 통해 공유


ActivateAudioInterfaceAsync 함수(mmdeviceapi.h)

Windows 스토어 앱이 WASAPI 제품군의 기존 COM(구성 요소 개체 모델) 인터페이스에 액세스할 수 있도록 합니다.

구문

HRESULT ActivateAudioInterfaceAsync(
  [in] LPCWSTR                                  deviceInterfacePath,
  [in] REFIID                                   riid,
  [in] PROPVARIANT                              *activationParams,
  [in] IActivateAudioInterfaceCompletionHandler *completionHandler,
       IActivateAudioInterfaceAsyncOperation    **activationOperation
);

매개 변수

[in] deviceInterfacePath

오디오 디바이스의 디바이스 인터페이스 ID입니다. 일반적으로 DeviceInformation 개체 또는 MediaDevice 클래스의 메서드 중 하나에서 검색됩니다.

GUID DEVINTERFACE_AUDIO_CAPTUREDEVINTERFACE_AUDIO_RENDER 각각 기본 오디오 캡처 및 렌더링 디바이스를 나타냅니다. StringFromIID를 호출하여 이러한 GUID 중 하나를 이 인수에 사용할 LPCWSTR로 변환합니다.

AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK 지정하여 프로세스 루프백 캡처를 위한 오디오 인터페이스를 활성화합니다. 프로세스 루프백 캡처 시나리오를 보여 주는 샘플 코드는 애플리케이션 루프백 API 캡처 샘플을 참조하세요.

[in] riid

WASAPI 패밀리에 있는 COM 인터페이스의 IID(예: IAudioClient)입니다.

[in] activationParams

인터페이스별 활성화 매개 변수입니다. 자세한 내용은 IMMDevice::ActivatepActivationParams 매개 변수를 참조하세요.

TBD부터 지정된 프로세스 ID와 연결된 오디오 스트림을 포함하거나 제외하도록 인터페이스를 활성화하는 AUDIOCLIENT_ACTIVATION_PARAMS 지정할 수 있습니다.

[in] completionHandler

활성화 프로시저의 결과를 사용할 수 있을 때 Windows에서 호출하는 호출자가 구현한 인터페이스입니다.

activationOperation

요청된 WASAPI 인터페이스를 활성화하는 비동기 작업을 나타내는 IActivateAudioInterfaceAsyncOperation 인터페이스를 반환합니다.

반환 값

함수는 HRESULT를 반환합니다. 가능한 값에는 다음 표에 있는 값이 포함되지만, 이에 국한되는 것은 아닙니다.

반환 코드 Description
S_OK
기본 개체 및 비동기 작업이 성공적으로 생성되었습니다.
E_ILLEGAL_METHOD_CALL
Windows 10 이전 버전의 Windows에서는 함수가 잘못된 COM 아파트에서 호출되거나 전달된 IActivateAudioInterfaceCompletionHandler가 Agile 개체(자유 스레드 마샬러 집계)에 구현되지 않은 경우 이 오류가 발생할 수 있습니다.

설명

이 함수를 사용하면 Windows.Devices 및 Windows.Media.Devices 네임스페이스에서 Windows 런타임 API를 사용하여 오디오 디바이스를 선택한 후 Windows 스토어 앱에서 특정 WASAPI COM 인터페이스를 활성화할 수 있습니다.

많은 구현의 경우 시스템에서 사용자에게 대화 상자를 표시할 수 있도록 애플리케이션이 기본 UI 스레드에서 이 함수를 호출하여 WASAPI 패밀리에서 COM 인터페이스를 활성화해야 합니다. 애플리케이션은 completionHandler를 통해 IActivateAudioInterfaceCompletionHandler 콜백 COM 인터페이스를 전달합니다. Windows는 활성화 결과를 사용할 수 있을 때 COM MTA(다중 스레드 아파트)의 작업자 스레드에서 애플리케이션의 IActivateAudioInterfaceCompletionHandler 인터페이스에서 메서드를 호출합니다. 그런 다음, 애플리케이션은 IActivateAudioInterfaceAsyncOperation 인터페이스에서 메서드를 호출하여 결과 코드 및 요청된 WASAPI 인터페이스를 검색할 수 있습니다. 명시적으로 안전하므로 기본 UI 스레드에서 이 함수를 호출할 필요가 없는 일부 활성화가 있습니다. 이러한 명시적으로 안전한 활성화는 다음과 같습니다.

  • 오디오 렌더링 디바이스 및 IAudioClient 인터페이스를 지정하는 riid를 지정하는 deviceInterfacePath를 사용하여 ActivateAudioInterfaceAsync를 호출합니다.
  • 오디오 렌더링 디바이스 및 IAudioEndpointVolume 인터페이스를 지정하는 riid를 지정하는 deviceInterfacePath를 사용하여 ActivateAudioInterfaceAsync를 호출합니다.
  • 세션 0 서비스에서 ActivateAudioInterfaceAsync 를 호출합니다. 자세한 내용은 서비스를 참조하세요.
Windows는 작업이 완료되고 애플리케이션이 IActivateAudioInterfaceAsyncOperation 인터페이스를 해제할 때까지 애플리케이션의 IActivateAudioInterfaceCompletionHandler 인터페이스에 대한 참조를 보유합니다.
중요  

애플리케이션은 완료 처리기 콜백이 실행될 때까지 IActivateAudioInterfaceCompletionHandler 를 구현하는 개체를 해제해서는 안 됩니다.

 
활성화된 WASAPI 인터페이스에 따라 이 함수는 처음 호출될 때 동의 프롬프트를 표시할 수 있습니다. 예를 들어 애플리케이션이 마이크에 액세스하기 위해 IAudioClient 를 활성화하기 위해 이 함수를 호출하는 경우 동의 프롬프트의 목적은 앱이 마이크에 액세스할 수 있는 사용자의 권한을 얻는 것입니다. 동의 프롬프트에 대한 자세한 내용은 개인 데이터에 액세스하는 디바이스에 대한 지침을 참조하세요.

동의 프롬프트를 표시할 수 있도록 기본 UI 스레드에서 ActivateAudioInterfaceAsync를 호출해야 합니다. 동의 프롬프트를 표시할 수 없는 경우 사용자는 앱에 대한 디바이스 액세스 권한을 부여할 수 없습니다.

Windows 10 이전 버전의 Windows에서는 오디오 캡처를 위해 디바이스를 열 때 STA(COM Single-Threaded Apartment)의 스레드에서 ActivateAudioInterfaceAsync를 호출해야 합니다. ActivateAudioInterfaceAsync에 전달되는 completionHandler는 MTA에서 completionHandler를 호출할 때 교착 상태가 없도록 IAgileObject를 구현해야 합니다. 그렇지 않으면 E_ILLEGAL_METHOD_CALL 발생합니다.

요구 사항

   
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 mmdeviceapi.h(Mmdevapi.idl 포함)
라이브러리 Mmdevapi.lib
DLL Mmdevapi.dll
IRQL

참고 항목

핵심 오디오 함수

IActivateAudioInterfaceAsyncOperation

IActivateAudioInterfaceCompletionHandler