VB.netでSpeechSynthesizer()を使用しています
スピーカーがすべてのデータを話し終えたことをどのように検出できますか?
私はこのコードを持っています:
repetitionCounter = 0
Do
speaker.SpeakAsync(textIntroduction.Text)
repetitionCounter += 1
If repetitionCounter = repeatXNumberOfTimes Then
MsgBox("Done")
Exit Do
End If
Loop
ただし、Doが開始されるとすぐに、MsgBoxがすぐに起動します。これは、.SpeakAsyncコマンドがメモリに読み込まれるため、repeatXNumberOfTimesがすぐに完了するためだと思います。
コードを次のように変更できます。
speaker.Speak(textIntroduction.Text)
これで動作します。ただし、フォームが「ロックアップ」し、フォームを操作できなくなります。Application.DoEvents()を実装しようとしましたが、フォームはまだ「ロックアップ」しています。
フォームをロックせずにスピーカーがスピーチを終了したときに通知を受け取るにはどうすればよいですか?
また、スピーカーにテキストを無限に再生させたい場合、これをどのように実装する必要がありますか?
*更新
これが私のコードです:
Dim speaker As New SpeechSynthesizer()
Public Event SpeakCompleted As EventHandler(Of SpeakCompletedEventArgs)
Dim handler As EventHandler(Of SpeakCompletedEventArgs)
Form_Load()で、次のコードを追加しました。
AddHandler speaker.SpeakCompleted, handler
それはどのように行われるべきですか?SpeakCompletedイベントが発生したときに実行されるコードはどこに記述すればよいですか?