ISpRecoResult::ScaleAudio (SAPI 5.4)

Speech API 5.4
Microsoft Speech API 5.4


ISpRecoResult::ScaleAudio converts an existing audio stream into a different audio format.

HRESULT ScaleAudio(
  const GUID           *pAudioFormatId,
  const WAVEFORMATEX   *pWaveFormatEx


[in] Address of the data format identifier. Typically, this value is SPDFID_WaveFormatEx.
[in] Address of the WAVEFORMATEX structure that contains the audio format to convert to. This value must be NULL if pAudioFormatId is not specified as SPDFID_WaveForamtEx.

Return values

S_OKFunction completed successfully.
E_INVALIDARGEither pAudioFormatId or pWaveFormatEx is invalid or bad.
SPERR_NO_AUDIO_DATAAudio stream is unavailable.
SPERR_UNSUPPORTED_FORMATThe engine format is non-waveformatex and the retained format the same format.
E_OUTOFMEMORYExceeded available memory.
FAILED(hr)Appropriate error message.


Use the ISpPhrase::Discard method to completely discard audio data associated with a result object.

The application can also set the default retained audio format for the ISpRecoResult object by calling ISpRecoContext::SetAudioOptions. Calling ::SetAudioOptions will only apply to all subsequent recognitions, not the current ISpRecoResult object.

When performing a scaling with a compressed format, it is possible to introduce small rounding errors, since the content of the audio is not used to perform the conversion.

Scaling between certain compressed formats is not supported by the SAPI format converter (See the Remarks section for ISpStreamFormatConverter).


The following code snippet illustrates the use ISpRecoResult::ScaleAudio to scale the audio to a low quality format before serialization to the disk (to save space).

// Declare local identifiers:
HRESULT                       hr = S_OK;
CComPtr<ISpRecoContext>       cpRecoContext;
CComPtr<ISpRecoResult>        cpRecoResult;
SPSERIALIZEDRESULT*           pSerializedResult = NULL;

// ... Obtain a recognition result object from the recognizer ...

// Create a format helper with a very low quality format.
CSpStreamFormat ScaleFormat(SPSF_8kHz8BitMono, &hr;);

if (SUCCEEDED(hr))
   hr = cpRecoResult->ScaleAudio(&;(ScaleFormat.FormatId()), ScaleFormat.WaveFormatExPtr());

if (SUCCEEDED(hr))
   // Serialize the result.
   hr = cpRecoResult->Serialize(&pSerializedResult;);

if (SUCCEEDED(hr))
   // Write pSerializedResult to the disk.


For information about the stream formats supported by SAPI, see SPSTREAMFORMAT.

See the CSpStreamFormat class for information about managing stream formats and WAVEFORMATEX structures.