SpVoice VoiceChange event (SAPI 5.4)
Object: SpVoice (Events)
The VoiceChange event occurs when the text-to-speech (TTS) engine detects a change of voice while speaking a stream for the SpVoice object.
SpVoice.VoiceChange( StreamNumber As Long, StreamPosition As Variant, VoiceObjectToken As SpObjectToken )
- The stream number which generated the event. When a voice enqueues more than one stream by speaking asynchronously, the stream number is necessary to associate an event with the appropriate stream.
- The character position in the output stream at which the change of voice occurs.
- The ObjectToken of the new voice.
The following Visual Basic form code demonstrates the use of the VoiceChange event. To run this code, create a form with the following controls:
- A command button called Command1
- A text box called Text1
Paste this code into the Declarations section of the form.
The Form_Load code creates an SpVoice object. The Command1_Click procedure sets the object's Voice property to three different voices, and enqueues a short sentence in each voice. Each time the TTS engine speaks with a new Voice property, a VoiceChange event is raised. The VoiceChange event code displays the name of the new voice in Text1.
Option Explicit Public WithEvents vox As SpeechLib.SpVoice Const cstrText = "my voice just changed." Private Sub Command1_Click() Set vox.voice = vox.GetVoices("name = microsoft mary").Item(0) vox.Speak cstrText, SVSFlagsAsync Set vox.voice = vox.GetVoices("name = microsoft mike").Item(0) vox.Speak cstrText, SVSFlagsAsync Set vox.voice = vox.GetVoices("name = microsoft sam").Item(0) vox.Speak cstrText, SVSFlagsAsync End Sub Private Sub Form_Load() Set vox = New SpVoice End Sub Private Sub vox_VoiceChange(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, _ ByVal VoiceObjectToken As SpeechLib.ISpeechObjectToken) Text1.Text = VoiceObjectToken.GetDescription End Sub