流管理

枚举系统中 音频终结点设备并识别合适的呈现或捕获设备后,音频客户端应用程序的下一个任务是打开与终结点设备的连接,并通过该连接管理音频数据流。 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 管理音频流:

编程指南