Microsoft Speech SDK
SAPI 5.1
ISpVoice::SetVoice
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.
HRESULT SetVoice(
ISpObjectToken *pToken
);
Parameters
- pToken
- [in] Pointer to token that describes the requested voice. If pToken is NULL, the system default voice is used.
Return values
Value | Description |
---|---|
S_OK | Function completed successfully. |
E_INVALIDARG | One or more parameters are invalid. |
Remarks
Changing the voice selection will preserve the same volume and rate levels for an ISpVoice object.
Example
The following is an example to enumerate all the available voices registered under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices.
HRESULT hr = S_OK; CComPtr<ISpObjectToken> cpVoiceToken; CComPtr<IEnumSpObjectTokens> cpEnum; CComPtr<ISpVoice> cpVoice; ULONG ulCount = 0; // Create the SAPI voice if(SUCCEEDED(hr)) hr = cpVoice.CoCreateInstance( CLSID_SpVoice ); //Enumerate the available voices if(SUCCEEDED(hr)) hr = SpEnumTokens(SPCAT_VOICES, NULL, NULL, &cpEnum); //Get the number of voices if(SUCCEEDED(hr)) hr = cpEnum->GetCount(&ulCount); // Obtain a list of available voice tokens, set the voice to the token, and call Speak while (SUCCEEDED(hr) && ulCount -- ) { cpVoiceToken.Release(); 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); }