关于 WASAPI
Windows 音频会话 API (WASAPI) 让客户端应用程序能够管理应用程序与音频终结点设备之间的音频数据流。
头文件 Audioclient.h 和 Audiopolicy.h 定义了 WASAPI 接口。
每个音频流都是音频会话的成员。 通过会话抽象,WASAPI 客户端可以将音频流标识为一组相关音频流的成员。 系统可以将会话中的所有流作为单个单元进行管理。
音频引擎是用户模式音频组件,应用程序通过该组件共享对音频终结点设备的访问。 音频引擎在终结点缓冲区和终结点设备之间传输音频数据。 若要通过呈现终结点设备播放音频流,应用程序会定期将音频数据写入呈现终结点缓冲区。 音频引擎混合各种应用程序中的流。 若要从捕获终结点设备录制音频流,应用程序会定期从捕获终结点缓冲区读取音频数据。
WASAPI 由多个接口组成。 其中第一个是 IAudioClient 接口。 若要访问 WASAPI 接口,客户端首先通过调用参数 iid 设置为 REFIID IID_IAudioClient 的 IMMDevice::Activate 方法来获取对音频终结点设备的 IAudioClient 接口的引用。 客户端调用 IAudioClient::Initialize 方法以初始化终结点设备上的流。 初始化流后,客户端可以通过调用 IAudioClient::GetService 方法获取对其他 WASAPI 接口的引用。
如果客户端应用程序正在使用的音频终结点设备无效,WASAPI 中的许多方法都会返回错误代码 AUDCLNT_E_DEVICE_INVALIDATED。 应用程序通常可以从此错误中恢复。 有关详细信息,请参阅从无效设备错误恢复。
WASAPI 实现以下接口。
接口 | 说明 |
---|---|
IAudioCaptureClient | 让客户端能够从捕获终结点缓冲区读取输入数据。 |
IAudioClient | 让客户端能够在音频应用程序和音频引擎或音频终结点设备的硬件缓冲器之间创建和初始化音频流。 |
IAudioClock | 让客户端能够监控流中的数据速率和流中的当前位置。 |
IAudioRenderClient | 让客户端能够将输出数据写入呈现终结点缓冲区。 |
IAudioSessionControl | 让客户端能够配置音频会话的控制参数并监控会话中的事件。 |
IAudioSessionManager | 让客户端能够访问跨进程和特定进程音频会话的会话控件和音量控件。 |
IAudioStreamVolume | 让客户端能够控制和监控音频流中所有通道的音量水平。 |
IChannelAudioVolume | 让客户端能够控制流所属音频会话中所有通道的音量水平。 |
ISimpleAudioVolume | 让客户端能够控制音频会话的主音量水平。 |
需要会话相关事件通知的 WASAPI 客户端应实现以下接口。
接口 | 说明 |
---|---|
IAudioSessionEvents | 提供会话相关事件的通知,如音量水平、显示名称和会话状态的变化。 |