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::Activate中的 pActivationParams 参数。

从 Windows 10 内部版本 20438 开始,可以指定 AUDIOCLIENT_ACTIVATION_PARAMS 来激活接口以包含或排除与指定进程 ID 关联的音频流。

[in] completionHandler

调用方实现的接口,当激活过程的结果可用时,由 Windows 调用。

activationOperation

返回一个 IActivateAudioInterfaceAsyncOperation 接口,该接口表示激活所请求 WASAPI 接口的异步操作。

返回值

该函数返回 HRESULT。 可能的值包括但不限于下表中的值。

返回代码 描述
S_OK
已成功创建基础对象和异步操作。
E_ILLEGAL_METHOD_CALL
在 Windows 10 之前的 Windows 版本中,如果函数从不正确的 COM 单元调用,或者传递的 IActivateAudioInterfaceCompletionHandler 未在敏捷对象上实现(聚合自由线程封送器),则此错误可能会导致此错误。

言论

此函数使 Windows 应用商店应用能够在 Windows.Devices 中使用 Windows 运行时 API 并 Windows.Media.Devices 命名空间中选择音频设备后激活某些 WASAPI COM 接口。

对于许多实现,应用程序必须从主 UI 线程调用此函数,以激活 WASAPI 系列中的 COM 接口,以便系统可以向用户显示对话框。 应用程序通过 completionHandler传递 IActivateAudioInterfaceCompletionHandler 回调 COM 接口。 当激活结果可用时,Windows 从 COM 多线程单元(MTA)中的辅助线程调用应用程序的 IActivateAudioInterfaceCompletionHandler 接口。 然后,应用程序可以在 IActivateAudioInterfaceAsyncOperation 接口中调用方法,以检索结果代码和请求 WASAPI 接口。 有一些激活是显式安全的,因此不需要从主 UI 线程调用此函数。 这些显式安全激活包括:

  • 使用指定音频呈现 设备和指定 IAudioClient 接口的 deviceInterfacePath 调用 ActivateAudioInterfaceAsync
  • 使用指定音频呈现 设备和指定 IAudioEndpointVolume 接口的 deviceInterfacePath 调用 ActivateAudioInterfaceAsync
  • 从会话 0 服务调用 ActivateAudioInterfaceAsync。 有关详细信息,请参阅 服务
Windows 保留对应用程序的 IActivateAudioInterfaceCompletionHandler 接口的引用,直到操作完成,应用程序才会发布 IActivateAudioInterfaceAsyncOperation 接口。
重要  

执行完成处理程序回调之前,应用程序不得释放实现 IActivateAudioInterfaceCompletionHandler 的对象。

 
根据激活 WASAPI 接口,此函数可能会在首次调用时显示同意提示。 例如,当应用程序调用此函数以激活 IAudioClient 来访问麦克风时,同意提示的目的是获取用户访问麦克风的权限。 有关同意提示的详细信息,请参阅访问个人数据的设备 指南。

必须在主 UI 线程上调用 activateAudioInterfaceAsync,以便显示同意提示。 如果无法显示同意提示,则用户无法授予设备对应用的访问权限。

在 Windows 10 之前的 Windows 版本中,在打开用于音频捕获的设备时,必须在 COM Single-Threaded 单元(STA)中的线程上调用 ActivateAudioInterfaceAsync。 传入 ActivateAudioInterfaceAsynccompletionHandler 需要实现 IAgileObject,以确保从 MTA 调用 completionHandler 时没有死锁。 否则,将发生 E_ILLEGAL_METHOD_CALL

要求

要求 价值
最低支持的客户端 Windows 8 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 窗户
标头 mmdeviceapi.h (包括 Mmdevapi.idl)
Mmdevapi.lib
DLL Mmdevapi.dll
IRQL

另请参阅

核心音频函数

IActivateAudioInterfaceAsyncOperation

IActivateAudioInterfaceCompletionHandler