SpVoice AudioLevel event (SAPI 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.
SpVoice.AudioLevel(
StreamNumber As Long,
StreamPosition As Variant,
AudioLevel As Long
)
Parameters
- StreamNumber
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. - StreamPosition
The character position in the output stream at which the audio level change occurs. - AudioLevel
The new audio level.
Example
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()
List1.Clear
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