1

我的表单上有一个标记为 Speak 的按钮,当用户单击它时,它synth.SpeakAsync(Textbox.text)会被触发,并且该按钮将其文本更改为“停止说话”。

然而,当用户点击停止说话,从而触发synth.speakAsyncCancelAll()它不会取消语音中间文本。

这是我的代码:

Private Sub btnSpeak_Click(sender As System.Object, e As System.EventArgs) Handles btnSpeak.Click
    If RTextBox.Text = "" Then Exit Sub

    Dim synth As New SpeechSynthesizer
    synth.Rate = -2

    If btnSpeak.Text = "Stop Speaking" Then
        btnSpeak.Text = "Speak"
        synth.SpeakAsyncCancelAll()

    ElseIf btnSpeak.Text = "Speak" Then
        btnSpeak.Text = "Stop Speaking"
        synth.SpeakAsync(RTextBox.Text)
    End If
4

2 回答 2

1

每次单击该按钮时,都会创建一个新的语音合成器。将昏暗合成器作为新的语音合成器从按钮单击事件中取出。这样它每次都会引用同一个合成器,然后它应该触发语音取消事件

于 2014-09-12T15:02:26.540 回答
0

SpeakAsyncCancelAll()会在被调用后引发SpeakCompleted事件,您可以使用以下代码监听它:

Imports System.Speech.Synthesis

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim synthesizer As New SpeechSynthesizer()
        AddHandler synthesizer.SpeakCompleted, AddressOf speakCompleted
    End Sub

    Private Sub speakCompleted(ByVal sender As Object, ByVal e As SpeakCompletedEventArgs)
        Dim cancelled = e.Cancelled
    End Sub
End Class
于 2014-09-11T15:35:12.323 回答