我一直在尝试构建一个应用程序,该应用程序将输入作为文本并给出输出为语音。
我推荐了此站点,以了解Python中的文本到语音模块:https://pythonprogramminglanguage.com/text-to-speech/
当我运行程序时,它可以完美地完成工作,但我无法使用暂停或简历等其他功能。因此,我尝试为语音功能创建一个新线程,以便每当我想要的时候更改IT语音。
这是程序:
import threading
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
t=threading.Event()
def s():
global t
t.set()
data="""This is a story of two tribal Armenian boys who belonged to the
Garoghlanian tribe. """
s=speak.Speak(data)
t1=threading.Thread(target=s)
t1.start
但是,我正在尝试使用TKINTER在GUI中实现该程序。我希望当用户单击按钮时读取文本。由于TKINTER的按钮将命令作为函数,因此我为新线程的初始化和启动做了一个函数,但是它正在产生一个错误,我无法解释并找到解决方案。
这是程序错误的程序:
import threading
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
t=threading.Event()
def s():
global t
t.set()
data="""This is a story of two tribal Armenian boys who belonged to the
Garoghlanian tribe. """
s=speak.Speak(data)
def strt():
t1=threading.Thread(target=s)
t1.start()
这是错误:
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:ApplicationPythonlibthreading.py", line 916, in _bootstrap_inner
self.run()
File "C:ApplicationPythonlibthreading.py", line 864, in run
self._target(*self._args, **self._kwargs)
File "C:UsersabsanDesktopPythonProject-SpeakItSI-1.py", line 32, in
speakITheart
s=speak.Speak(data)
File "C:UsersabsanAppDataLocalTempgen_py3.6C866CA3A-32F7-11D2-9602-
00C04F8EE628x0x5x4.py", line 2980, in Speak
, 0)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None,
None, 0, -2147221008), None)
编辑:伙计们,我以某种方式在写这篇文章时找到了一种解决方法。我刚刚将这些行添加到程序
import pyttsx3
engine = pyttsx3.init()
我真的不知道它如何解决错误,但它起作用了!因此,这篇文章可能对面临同样问题的人有帮助。
欢呼!
我喜欢评论中的解决方案。只需在非序列线程中包含此行即可在IT中使用com(就在讲话之前)
pythoncom.CoInitialize()
self.engine.Speak(self.msg)