Можно позволить 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 предоставляет информацию обо всем, что только что происходит, поэтому маловероятно, что он не предоставляет информацию о том, какой из запросов он просто обрабатывает.
Как это можно было восстановить?
Prompt
SpeakAsync
?SpeakProgressEventArgs
включаетPrompt
, как иSpeakCompletedEventArgs
. - person TnTinMn   schedule 11.04.2019Inherits Prompt
) со всеми нужными вам идентифицирующими свойствами и передать его вSpeakAsync
. - person TnTinMn   schedule 12.04.2019