SpVoice VoiceChange event (SAPI 5.3)

Speech API 5.3
Microsoft Speech API 5.3

Object: SpVoice (Events)

VoiceChange Event

The VoiceChange event occurs when the text-to-speech (TTS) engine detects a change of voice while speaking a stream for the SpVoice object.

     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