首页 > 解决方案 > 如何在完成之前在 PowerShell 中中断和停止 TTS 引擎?

问题描述

在 PowerShell 5.1.18362.752 中,当我尝试执行以下操作时:

Add-Type -AssemblyName System.Speech; $x = New-Object System.Speech.Synthesis.SpeechSynthesizer; $x.Speak('Hello. This is a sentence.')

我似乎无法在它说话的时候用 Ctrl+C 打断它。整个输入被大声读出。有没有办法在它自己完成之前阻止它?我知道我可以关闭 PowerShell 立即停止语音,但我正在寻找更优雅的东西,特别是因为我的 PS 需要一秒或多秒才能重新启动——对于我的用例,我需要能够快速中断语音无需用户等待几秒钟即可启动另一个。

标签: powershellpowershell-5.0

解决方案


您应该调用SpeakAsync()异步方法而不是Speak()阻塞。

然后你可以很容易地停止演讲SpeakAsyncCancelAll()

Add-Type -AssemblyName System.Speech;
$x = New-Object System.Speech.Synthesis.SpeechSynthesizer;
$x.SpeakAsync('Hello. This is a very very very very long sentence.')
Start-Sleep 1
$x.SpeakAsyncCancelAll()

在microsoft docs中可以找到很多有用的信息。


推荐阅读