如何在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需要一秒钟或几秒钟才能重新启动——对于我的用例,我需要能够中断语音并快速启动另一个语音,而无需用户等待几秒钟。

您应该调用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()

在微软文档中可以找到很多有用的信息。

最新更新