Можно разрешить SpeechSynthesizer произносить текст асинхронно, например, так:
Private WithEvents _Synth As New SpeechSynthesizer
Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
_Synth.SpeakAsync(New Prompt(Me.TextBox1.Text))
End If
End Sub
События, которые генерирует SpeechSynthesizer
, позволяют нам определить, что компьютерный голос только говорит.
Например, вы можете визуализировать речевой вывод, выбрав следующие символы:
Private Sub _Synth_SpeakProgress(sender As Object, e As SpeakProgressEventArgs) Handles _Synth.SpeakProgress
Me.TextBox1.SelectionStart = e.CharacterPosition
Me.TextBox1.SelectionLength = e.CharacterCount
End Sub
Однако, когда SpeakAsync
вызывается повторно (например, когда мы говорим SpeechSyntesizer
говоритьтот же текст, в то время как он в настоящее время просто говорит), речевые запросы ставятся в очередь, и SpeechSynthesizer
воспроизводит их один за другим.
Однако я не смог выяснить, какой запрос синтезатор в настоящее времяГоворящий.SpeakProgressEventArgs
не раскрывать это :
Используя SAPI5, события предоставили StreamNumber
:
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.
Используя этот StreamNumber, вы всегда можете сказать, что SpeechSynthesizer просто воспроизводит / говорит.
Реализация System.Speech.Synthesis является современной версией реализации SAPI5.
ОднакоЯ просто не нахожу индикатор StreamNumber или подобную информацию.
System.Speech.Synthesis предоставляет информацию обо всем, что только что происходит, поэтому весьма маловероятно, что он не предоставит информацию о том, какой иззапросы это просто обработка.
Как это можно получить?