本人使用的是macos arm架构,在Python中使用pyttsx3包时发生了父类初始化方法的错误。
在
model = pyttsx3.init()
运行之后,发生了此错误
12: ObjCSuperWarning: Objective-C subclass uses super(), but super is not objc.super
class NSSpeechDriver(NSObject):
13 @objc.python_method
14 def initWithProxy(self, proxy):
---> 15 self = super(NSSpeechDriver, self).init()
16 if self:
17 self._proxy = proxy
AttributeError: 'super' object has no attribute 'init'
根据
https://stackoverflow.com/questions/76434535/attributeerror-super-object-has-no-attribute-init
的解决方法我更改了nsss.py的部分代码
更改前
def initWithProxy(self, proxy):
self = super(NSSpeechDriver, self).init()
if self:
self._proxy = proxy
self._tts = NSSpeechSynthesizer.alloc().initWithVoice_(None)
self._tts.setDelegate_(self)
# default rate
self._tts.setRate_(200)
self._completed = True
return self
更改后
def initWithProxy(self, proxy):
self = objc.super(NSSpeechDriver, self).init()
if self:
self._proxy = proxy
self._tts = NSSpeechSynthesizer.alloc().initWithVoice_(None)
self._tts.setDelegate_(self)
# default rate
self._tts.setRate_(200)
self._completed = True
return self
或者
def initWithProxy(self, proxy):
if self:
self._proxy = proxy
self._tts = NSSpeechSynthesizer.alloc().initWithVoice_(None)
self._tts.setDelegate_(self)
# default rate
self._tts.setRate_(200)
self._completed = True
return self
结果在运行
model.runAndwWait()
时
在发出前面通过model.say()输入的声音后,kernel内核直接挂掉
如图所示
在macOS系统上,需要确保安装了pyobjc库.
(PyObjC是一个Python框架,用于在Python中使用Objective-C编写的Cocoa应用程序。它提供了一组工具和桥接代码,使得可以直接在Python中调用Objective-C的API。)
安装指令如下
pip install pyobjc
检查下命名和对应使用的模块一样不,有可能是因为模块名称重复
可能是内存不够? .可参考如下链接:
https://blog.csdn.net/sxf1061700625/article/details/129112436
缺库或者版本有问题吧
降下版本
https://stackoverflow.com/questions/54243316/how-to-fix-pyttsx3-when-it-isnt-working
WIN7使用pyttsx3初始化失败init()解决办法:
首先,win10,11使用没有任何问题。使用方法很普通:
import pyttsx3
pt = pyttsx3.init()
pt.setProperty('rate', 120)
pt.setProperty('volume', 0.7)
pt.say("hello,测试)
pt.runAndWait()
1
2
3
4
5
6
7
但是换到WIN7的时候就出问题了。
看错误就是初始化的问题。针对这个问题,我们可以尝试使用其他的包,但是我们这里就针对解决这个包的问题。
前提补充,win7不支持3.9版本及以上,所以我使用的是3.8.8版本,但是3.8.10版本能不能用看资料是能用,但是我印象中是不能用的。
首先,确认WIN7电脑是否安装了语音识别模块,并且该模块没有问题。没有解决进行下一步。
再次,把pyttsx3包换用2.7.1版本,我之前用的是python3.8.8+pyttsx32.9.0,所以出问题了。
再次,重装pypiwin32,然后再安装pyttsx32.7.1。
.最后,init进行传参,init(‘dummy’)或init(‘sapi5’)。因为最新版本有一些未解决的提交问题,需要为init提供一个驱动程序键参数,‘dummy’或’sapi5’,我的项目是需要sapi5才会有声音,要不没有声音。
可以用以下格式编写代码:
try:
pt = pyttsx3.init('sapi5')
except:
try:
pt =- pyttsx3.init()
except:
try:
pt = pyttsx3.init('dummy')
Traceback (most recent call last):
File “pyttsx3_init_.py”, line 20, in init
File “weakref.py”, line 131, in getitem
KeyError: None
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “main.py”, line 33, in
File “auto_web.py”, line 32, in auto_web.begin
File “pyttsx3_init_.py”, line 22, in init
File “pyttsx3\engine.py”, line 30, in init
File “pyttsx3\driver.py”, line 52, in init
File “pyttsx3\drivers\sapi5.py”, line 30, in buildDriver
File “pyttsx3\drivers\sapi5.py”, line 47, in init
File “pyttsx3\drivers\sapi5.py”, line 90, in getProperty
_ctypes.COMError: (-2147200966, None, (None, None, None, 0, None))
错误如上:不是打包时包的问题,win10可以正常运行,但是win7不能运行,原因时win7的语音包有问题,修复一下即可,建议还是使用win10以上的系统。
更新pyttsx3包到最新版本,或用其他 TTS(文本到语音)库作为替代方案,如 gTTS 或 pyttsx
这可能是由于 pyttsx3 包的一部分是用 Objective-C 编写的,可能并不完全与 Python 的 super() 函数兼容。更新 pyttsx3 到最新版本看看,或者直接调用父类的初始化方法,而不是使用 super()。
版本不兼容吧 看下版本是不是匹配
【以下回答由 GPT 生成】
根据你提供的信息,你遇到了pyttsx3包在macOS arm架构上的初始化问题,并且你已经尝试了一种解决方法。我可以进一步解释你遇到的问题以及提供可能的解决方案。
根据错误信息,问题出现在NSSpeechDriver
类的initWithProxy
方法中的super(NSSpeechDriver, self).init()
这行代码上。这个错误是因为在新的Objective-C框架中,使用了super()
来调用父类的初始化方法,但在此特定情况下,super
对象没有init
属性,导致错误。
为了解决这个问题,根据你提供的代码,你已经尝试过在nsss.py
文件的initWithProxy
方法中使用objc.super()
来调用父类的初始化方法,这是一种可行的解决办法。经过这个更改后,你是否还遇到其他问题?如果有,请提供更多详细信息。
如果你仍然遇到其他问题或错误,请提供更多信息,如完整的错误堆栈跟踪或其他相关代码,以便我能够更好地帮助你解决问题。