SpVoice AudioLevel event (SAPI 5.3)

Speech API 5.3
Microsoft Speech API 5.3

Object: SpVoice (Events)

AudioLevel Event

The AudioLevel event occurs when the text-to-speech (TTS) engine detects an audio level change while speaking a stream for the SpVoice object.

     StreamNumber As Long,
     StreamPosition As Variant,
     AudioLevel As Long


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 audio level change occurs.
The new audio level.


The following Visual Basic form code demonstrates the use of the AudioLevel event. To run this code, create a form with the following controls:

  • A command button called Command1
  • A text box called Text1
  • A list box called List1

Paste this code into the Declarations section of the form.

The Form_Load code creates an SpVoice object, adds AudioLevel to its event interests, and places sample text in Text1. The Command1_Click procedure speaks the text in Text1. The Word event code displays each word spoken. The AudioLevel event code converts each new audio level to a string of asterisks, effectively displaying the audio levels in a graph format.

Option Explicit

Public WithEvents vox As SpeechLib.SpVoice

Private Sub Command1_Click()
    vox.Speak Text1.Text, SVSFlagsAsync + SVSFIsXML
End Sub

Private Sub Form_Load()

    ' SVEAudioLevel not in default EventInterests -- must be added!

    Set vox = New SpVoice
    vox.EventInterests = vox.EventInterests Or SVEAudioLevel
    Text1.Text = "audio levels change often"

End Sub

Private Sub vox_AudioLevel(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, _
                           ByVal AudioLevel As Long)

    List1.AddItem String(AudioLevel, "*")   'AudioLevel value sets length of string

End Sub

Private Sub vox_Word(ByVal StreamNumber As Long, ByVal StreamPosition As Variant, _
                     ByVal CharacterPosition As Long, ByVal Length As Long)

    List1.AddItem Mid(Text1.Text, CharacterPosition + 1, Length)

End Sub