ISpatialAudioObjectBase::GetBuffer method (spatialaudioclient.h)

Gets a buffer that is used to supply the audio data for the ISpatialAudioObject.

Syntax

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

Parameters

[out] buffer

The buffer into which audio data is written.

[out] bufferLength

The length of the buffer in bytes. This length will be the value returned in the frameCountPerBuffer parameter to ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects multiplied by the value of the nBlockAlign field of the WAVEFORMATEX structure passed in the SpatialAudioObjectRenderStreamActivationParams
parameter to ISpatialAudioClient::ActivateSpatialAudioStream.

Return value

If the method succeeds, it returns S_OK. If it fails, possible return codes include, but are not limited to, the values shown in the following table.

Return code Description
SPTLAUDCLNT_E_OUT_OF_ORDER

ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects was not called before the call to GetBuffer. This method must be called before the first time GetBuffer is called and after every subsequent call to ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects.

SPTLAUDCLNT_E_RESOURCES_INVALIDATED

SetEndOfStream was called either explicitly or implicitly in a previous audio processing pass. SetEndOfStream is called implicitly by the system if GetBuffer is not called within an audio processing pass (between calls to ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects and ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects).

Remarks

The first time GetBuffer is called after the ISpatialAudioObject is activated with a call ISpatialAudioObjectRenderStream::ActivateSpatialAudioObject,
lifetime of the spatial audio object starts.
To keep the spatial audio object alive after that, this GetBuffer must be called on every processing pass (between calls to ISpatialAudioObjectRenderStream::BeginUpdatingAudioObjects and ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects). If GetBuffer is not called within an audio processing pass, SetEndOfStream is called implicitly on the audio object to deactivate, and the audio object can only be reused after calling Release on the object and then reactivating the object by calling ActivateSpatialAudioObject again.

The pointers retrieved by GetBuffer should not be used after
ISpatialAudioObjectRenderStream::EndUpdatingAudioObjects has been called.

Requirements

Requirement Value
Target Platform Windows
Header spatialaudioclient.h

See also

ISpatialAudioObject

ISpatialAudioObjectBase