powershell - 如何在完成之前在 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()
在microsoft docs中可以找到很多有用的信息。
推荐阅读
- excel - 从 Outlook 运行 Excel 宏并将值返回到 Outlook
- jpos - JPOS 中的默认空间大小是多少以及如何增加 JPOS 中的默认空间大小?
- javascript - Material UI Tabs:在标签之间切换后,标签中的更改被丢弃
- go - 为什么使用 ETH_P_ALL 的所有协议都没有通过原始套接字接收数据包?
- c++ - 为什么 -Werror=unused-variable 没有检测到一些未使用的变量?
- flutter - 从 Flutter 中的列表中提取数字并用逗号分隔
- node.js - 调试 NodeJ 时出现“未捕获错误:getaddrinfo ENOTFOUND”错误
- go - 从 amqp 解组消息正文时出错
- ios - 在 Swift 或 Objective-C 中缩短 UIKit 的策略
- scrapy - Scrapy - 获取没有响应的失败请求的深度级别