Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

ISpVoice::SetVoice (SAPI 5.4)

Speech API 5.4
Microsoft Speech API 5.4


ISpVoice::SetVoice sets the identity of the voice used for text synthesis. ISpVoice normally uses the default voice, which is set through Speech properties in Control Panel.

   ISpObjectToken   *pToken


[in] Pointer to token that describes the requested voice. If pToken is NULL, the system default voice is used.

Return values

S_OKFunction completed successfully.
E_INVALIDARGOne or more parameters are invalid.


Changing the voice selection will preserve the same volume and rate levels for an ISpVoice object.


The following is an example to enumerate all the available voices registered under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices.

// Declare local identifiers:
HRESULT                        hr = S_OK;
CComPtr<ISpObjectToken>        cpVoiceToken;
CComPtr<IEnumSpObjectTokens>   cpEnum;
CComPtr<ISpVoice>              cpVoice;
ULONG                          ulCount = 0;

// Create the SAPI voice.
hr = cpVoice.CoCreateInstance(CLSID_SpVoice);

if (SUCCEEDED (hr))
   // Enumerate the available voices.
   hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum;);

if (SUCCEEDED (hr))
   // Get the number of voices.
   hr = cpEnum->GetCount(&ulCount;);

// Obtain a list of available voice tokens, set
// the voice to the token, and call Speak.
while (SUCCEEDED(hr) && ulCount--)

   if (SUCCEEDED (hr))
      hr = cpEnum->Next(1, &cpVoiceToken;, NULL);

   if (SUCCEEDED (hr))
      hr = cpVoice->SetVoice(cpVoiceToken);

   if (SUCCEEDED (hr))
      hr = cpVoice->Speak( L"How are you?", SPF_DEFAULT, NULL );


if (SUCCEEDED (hr))
   // Do more stuff here.
© 2015 Microsoft