IAudioCaptureClient::ReleaseBuffer 方法 (audioclient.h)

ReleaseBuffer 方法释放缓冲区。

语法

HRESULT ReleaseBuffer(
  [in] UINT32 NumFramesRead
);

参数

[in] NumFramesRead

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

返回值

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

返回代码 说明
AUDCLNT_E_INVALID_SIZE
NumFramesRead 参数设置为数据包大小或 0 以外的值。
AUDCLNT_E_OUT_OF_ORDER
此调用之前没有相应的 IAudioCaptureClient::GetBuffer 调用。
AUDCLNT_E_DEVICE_INVALIDATED
音频终结点设备已拔出,或者音频硬件或关联的硬件资源已重新配置、禁用、删除或以其他方式不可用。
AUDCLNT_E_SERVICE_NOT_RUNNING
Windows 音频服务未运行。

注解

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

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

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

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

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

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

要求

要求
最低受支持的客户端 Windows Vista [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2008 [桌面应用 | UWP 应用]
目标平台 Windows
标头 audioclient.h

另请参阅

IAudioCaptureClient 接口

IAudioCaptureClient::GetBuffer