SpVoice EventInterests property (SAPI 5.3)
The EventInterests property gets and sets the types of events received by the SpVoice object.
When a text-to-speech (TTS) engine speaks a stream of text, it is constantly detecting certain conditions in the stream, such as the completion of phonemes, words and sentences. When it detects one of these conditions, the engine is able to generate a component object model (COM) event that will be received by the voice object that enqueued the stream.
When the engine detects a potential event condition in a stream, it checks the EventInterests property of the voice that enqueued the stream. If that event type is included in the voice object's event interests, the engine will generate an event of that type.
In Visual Basic, it is necessary to use the WithEvents keyword when dimensioning an SpVoice object intended to receive events. The default setting of the EventInterests property is 33278, or 0x081FE, which represents the sum of all SpeechVoiceEvents constants except SVEAudioLevel (a change in audio level).
|Set:||SpVoice.EventInterests = SpeechVoiceEvents|
|Get:||SpeechVoiceEvents = SpVoice.EventInterests|
- The owning object.
Set: One or more SpeechVoiceEvents setting the EventInterests.
Get: A number equivalent to the SpeechVoiceEvents in the EventInterests.
The values assigned to SpeechVoiceEvents constants are single-bit values, like 1, 2, 4, 8, 16, etc. Use a logical Or function to add them to EventInterests, and a logical XOr function to remove them. It should be noted that a logical Xor function does not zero a bit value, but toggles the value. Because of this, it is necessary to ensure that the bit value is set before attempting to zero it with an Xor.
Recognition contexts support an EventInterests property, which uses a similar syntax to specify interest in speech recognition events.
The following Visual Basic form code demonstrates the syntax of the EventInterests property. Interest in individual events is set and reset using logical Or and Xor statements.
To run this code, create a single form without any controls on it. Paste this code into the Declarations section of the form.
Option Explicit Dim objVoice As SpeechLib.SpVoice Private Sub Form_Load() On Error GoTo EH Set objVoice = New SpVoice Call EventInterests EH: If Err.Number Then ShowErrMsg End Sub Private Sub EventInterests() On Error GoTo EH With objVoice ' Add the SVEPhoneme and SVEViseme constants to Event Interests ' (setting bit with logical 'Or' doesn't require testing): .EventInterests = .EventInterests Or SVEPhoneme MsgBox .EventInterests, vbInformation .EventInterests = .EventInterests Or SVEViseme MsgBox .EventInterests, vbInformation ' Remove the SVEViseme constant from Event Interests ' (zeroing bit with logical 'Xor' requires testing!)-- If (.EventInterests And SVEViseme) = SVEViseme Then .EventInterests = .EventInterests Xor SVEViseme MsgBox .EventInterests, vbInformation End If End With EH: If Err.Number Then ShowErrMsg End Sub Private Sub ShowErrMsg() ' Declare identifiers: Dim T As String T = "Desc: " & Err.Description & vbNewLine T = T & "Err #: " & Err.Number MsgBox T, vbExclamation, "Run-Time Error" End End Sub