IAudioCaptureClient::ReleaseBuffer 方法(audioclient.h)

ReleaseBuffer 方法释放缓冲区。

Syntax

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesRead
);

参数

[in] NumFramesRead

客户端从捕获缓冲区读取的音频帧数。 此参数必须等于以前获取的数据包或 0 中的帧数。

返回值

如果方法成功,则返回S_OK。 如果失败,则可能的返回代码包括但不限于下表中显示的值。

返回代码 Description
AUDCLNT_E_INVALID_SIZE
NumFramesRead 参数设置为数据包大小或 0 以外的值。
AUDCLNT_E_OUT_OF_ORDER
此调用前面没有相应的 IAudioCaptureClient::GetBuffer 调用。
AUDCLNT_E_DEVICE_INVALIDATED
音频终结点设备已拔出,或者已重新配置、禁用、删除音频硬件或关联的硬件资源,否则无法使用。
AUDCLNT_E_RESOURCES_INVALIDATED
流的资源已失效。 由于以下原因,可能会引发此错误:
- 流已挂起。
- 独占流或卸载流已断开连接。
- 具有独占模式或卸载流的打包应用程序已静止。
- 关闭“受保护的输出”流。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音频服务未运行。

注解

客户端在读取之前通过调用 IAudioCaptureClient::GetBuffer 方法获取的数据包后,应调用此方法。

在客户端调用 ReleaseBuffer 释放数据包之前,保证客户端从 GetBuffer 调用获取的数据包中的数据保持有效。

在每个 GetBuffer 调用与其对应的 ReleaseBuffer 调用之间,客户端必须读取整个数据包或其中任何数据包。 如果客户端在 GetBuffer 调用后读取整个数据包,则应调用 NumFramesRead 设置为数据包中的帧总数的 ReleaseBuffer。 在这种情况下,对 GetBuffer 的下一次调用将生成新的数据包。 如果客户端在调用 GetBuffer 后从数据包中读取任何数据,则应调用 NumFramesRead 设置为 0 的 ReleaseBuffer。 在这种情况下,下一个 GetBuffer 调用将生成与上一 个 GetBuffer 调用相同的数据包。

如果客户端调用 NumFramesRead 设置为数据包大小或 0 以外的任何值 ReleaseBuffer,则调用将失败并返回错误代码AUDCLNT_E_INVALID_SIZE。

客户端应避免 GetBuffer 调用获取缓冲区和释放缓冲区的 ReleaseBuffer 调用之间的过度延迟。 音频引擎的实现假定 GetBuffer 调用和相应的 ReleaseBuffer 调用在同一缓冲区处理期间发生。 延迟释放缓冲区的客户端可能会丢失样本数据。

有关调用 ReleaseBuffer 方法的代码示例,请参阅 捕获流

要求

Requirement 价值
最低支持的客户端 Windows Vista [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2008 [桌面应用 |UWP 应用]
目标平台 Windows操作系统
Header audioclient.h

另请参阅

IAudioCaptureClient 接口

IAudioCaptureClient::GetBuffer