ISpatialAudioObjectBase::GetBuffer 方法 (spatialaudioclient.h)

获取用于为 ISpatialAudioObject 提供音频数据的缓冲区。

语法

HRESULT GetBuffer(
  [out] BYTE   **buffer,
  [out] UINT32 *bufferLength
);

参数

[out] buffer

将音频数据写入其中的缓冲区。

[out] bufferLength

缓冲区的长度(以字节为单位)。 此长度将是 frameCountPerBuffer 参数中返回到 ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects 的值乘以 SpatialAudioObjectRenderStreamActivationParams 中传递的 WAVEFORMATEX 结构的 nBlockAlign 字段的值
参数为 ISpatialAudioClient::ActivateSpatialAudioStream

返回值

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

返回代码 说明
SPTLAUDCLNT_E_OUT_OF_ORDER

在调用 GetBuffer 之前,未调用 ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects。 必须在首次调用 GetBuffer 之前和每次后续调用 ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects 之后调用此方法。

SPTLAUDCLNT_E_RESOURCES_INVALIDATED

在以前的音频处理过程中,已显式或隐式调用 SetEndOfStream。 如果未在音频处理中调用 GetBuffer,则系统将隐式调用 SetEndOfStream, (在调用 ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjectsISpatialAudioObjectRenderStream::EndUpdatingAudioObjects) 。

注解

使用调用 ISpatialAudioObjectRenderStream::ActivateSpatialAudioObject 激活 ISpatialAudioObject 后首次调用 GetBuffer 时,
空间音频对象的生存期开始。
若要使空间音频对象保持活动状态,必须在每次处理传递 (调用 ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjectsISpatialAudioObjectRenderStream::EndUpdatingAudioObjects 之间调用此 GetBuffer) 。 如果未在音频处理过程中调用 GetBuffer ,则会在要停用的音频对象上隐式调用 SetEndOfStream ,并且只有在对对象调用 Release 之后,再通过再次调用 ActivateSpatialAudioObject 重新激活对象后,才能重复使用音频对象。

不应在之后使用 GetBuffer 检索的指针
已调用 ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects

要求

要求
目标平台 Windows
标头 spatialaudioclient.h

另请参阅

ISpatialAudioObject

ISpatialAudioObjectBase