流管理

枚举系统中的音频终结点设备并确定合适的呈现或捕获设备后,音频客户端应用程序的下一个任务是打开与终结点设备的连接,并管理通过该连接传输的音频数据流。 WASAPI 使客户端能够创建和管理音频流。

WASAPI 实现多个接口,为音频客户端提供流管理服务。 主接口为 IAudioClient。 客户端通过对终结点对象调用 IMMDevice::Activate 方法(参数 iid设置为 REFIID IID_IAudioClient)来获取音频终结点设备的 IAudioClient 接口。

客户端在 IAudioClient 接口中调用方法执行以下操作:

  • 发现终结点设备支持的音频格式。
  • 获取终结点缓冲区大小。
  • 获取流格式和延迟。
  • 启动、停止和重置流经终结点设备的流。
  • 访问其他音频服务。

若要创建流,客户端调用 IAudioClient::Initialize 方法。 通过此方法,客户端指定流的数据格式、终结点缓冲区的大小以及流是以共享模式还是独占模式运行。

IAudioClient 接口中的剩余方法分为两组:

只有在调用 IAudioClient::Initialize 后才能调用以下方法:

IAudioClient::Initialize 调用之前或之后可以调用以下方法:

若要访问其他音频客户端服务,客户端调用 IAudioClient::GetService 方法。 通过此方法,客户端可以获取对以下接口的引用:

此外,需要会话相关事件通知的 WASAPI 客户端应实现以下接口:

最后,客户端可能使用更高级别的 API 创建音频流,但也需要访问包含流的会话的会话控件和音量控件。 较高级别的 API 通常不提供此访问权限。 客户端可以通过 IAudioSessionManager 接口获取特定会话的控件。 此接口使客户端能够获取会话的 IAudioSessionControlISimpleAudioVolume 接口,而无需客户端使用 IAudioClient 接口创建流并将流分配给会话。 客户端通过对终结点对象调用 IMMDevice::Activate 方法(参数 iid设置为 REFIID IID_IAudioSessionManager)来获取音频终结点设备的 IAudioSessionManager 接口。

IAudioSessionControlIAudioSessionEventsIAudioSessionManager 接口在头文件 Audiopolicy.h 中定义。 所有其他 WASAPI 接口都在头文件 Audioclient.h 中定义。

以下部分介绍如何使用 WASAPI 管理音频流:

编程指南