python-3.x - 如何随时停止 pyttsx3 语音
问题描述
我希望 pyttsx 从我的剪贴板读取文本,所以我可以复制文本,然后让计算机为我读取它,它工作得很好,除了它真的很烦人我不能随意停止文本到语音,我要么尽管我已经失去了兴趣,但必须停止整个程序并重新启动或让它完成。
我试过使用engine.startloop和engine.endloop,但它只是让我的代码卡住了,也许有一种方法可以使用startloop,我可以在按下按钮时退出语音,但老实说我不知道如何使用startloop .
然后我尝试了这个脚本:
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
speak.Speak("Hello World")
再次。效果很好,但我不知道如何在演讲中停止它。
哦,是的,我尝试使用线程,问题是 engine.runAndWait() 从字面上使语音运行,其他一切都在等待。
import keyboard
import win32clipboard
import pyttsx3
def init():
print("init")
def start(text):
engine = pyttsx3.init()
#more code here but its just setting the volume and speech rate
engine.say(text,"txt")
engine.runAndWait()
def action():
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData()
win32clipboard.CloseClipboard()
start(data)
keyboard.add_hotkey("ctrl+alt", lambda: action())
init()
所以是的,基本上,我正在寻找一种使用热键停止文本到语音的方法,如果 pyttsx3 不可能,那很好,但我想使用不需要互联网的文本到语音模块,因为我的连接是有时安静穷哈哈
解决方案
我现在感觉真的很笨,我解决了,我在之前的尝试中使用了 pynput,然后尝试使用键盘,达到了我之前的状态(无法在语音中停止文本)
无论如何,如果您想知道如何让 pyttsx3 关闭用户输入...这里是:
def onWord(name, location, length):
print ('word', name, location, length)
if keyboard.is_pressed("esc"):
engine.stop()
engine.connect('started-word', onWord)
只需将其复制并粘贴到“engine.say('your text')”上方,引擎将在您按下键盘上的 esc 时停止,同时确保:
import keyboard
在脚本的顶部
推荐阅读
- docusignapi - DocuSign OrgAdmin API > 更新用户时未经授权
- batch-file - 批处理文件中的 %ERRORLEVEL% 引用另一个批处理文件中的变量
- git - git 远程重写历史记录
- python-3.x - 如何让按钮自毁?
- javascript - 找不到管道“can”
- sql - 如何在dremio中计算每行月的最后一天?
- excel - 尝试使用 IE 和 excel vba 在 sap webapp 上自动输入数据
- angular - 在 2 页中使用组件时显示 Ionic 4 错误
- mysql - 如何从两个 MySQL 数据库列中计算一个值以用于 WHERE 子句
- powerbi - Dax 公式不会忽略 Power BI 中的最后一个下拉筛选器