📜  pyttsx3 不会用音频初始化 (1)

📅  最后修改于: 2023-12-03 15:34:33.239000             🧑  作者: Mango

pyttsx3 不会用音频初始化

在使用Python中的TTS(Text-to-speech)库——pyttsx3时,有可能会遇到一个问题:Audio initialization failed.,即音频初始化失败。这个问题通常是由于默认音频引擎不支持所选的语音库而引起的。本篇文章将介绍如何解决这个问题。

问题描述

当你使用pyttsx3进行语音合成时,可能会遇到以下错误:

import pyttsx3

engine = pyttsx3.init()
engine.say("Hello World!")
engine.runAndWait()

输出结果:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python38\lib\site-packages\pyttsx3\__init__.py", line 22, in init
    eng = _activeEngines[driverName]
  File "C:\Python38\lib\weakref.py", line 131, in __getitem__
    o = self.data[key]()
KeyError: None

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "C:\Python38\lib\site-packages\pyttsx3\__init__.py", line 28, in init
    self._driver = driver.DriverProxy(weakref.proxy(self), driverName, debug)
  File "C:\Python38\lib\site-packages\pyttsx3\driver.py", line 50, in __init__
    self._module = importlib.import_module(name)
  File "C:\Python38\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Python38\lib\site-packages\pyttsx3\drivers\sapi5.py", line 3, in <module>
    import pythoncom
  File "C:\Python38\lib\site-packages\pythoncom.py", line 2, in <module>
    from pywintypes import IID, CLSID
ModuleNotFoundError: No module named 'pywintypes'

在Windows上,你还可能会看到类似于Audio initialization failed.的错误消息。

问题解决
安装pywin32

首先,确保你已经安装了pywin32。可以通过pip安装:

pip install pywin32

同时,请确保你安装了Microsoft Visual C++ Build Tools。

更改音频驱动程序

如果安装了pywin32之后还是不能正常工作,你可以尝试更改音频驱动程序。具体来说,可以使用sapi5驱动程序而不是默认的nsss驱动程序。可以这样做:

import pyttsx3

engine = pyttsx3.init('sapi5')
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)
engine.say("Hello World!")
engine.runAndWait()

在Windows上,使用sapi5驱动程序通常是解决音频初始化失败错误的最可靠方法。 但是,请注意,使用sapi5需要安装Microsoft Speech SDK,并安装与TTS使用的语言相对应的语音包。

使用其他音频引擎

如果尝试更改音频驱动程序仍然不能解决问题,那么可以尝试使用其他音频引擎,例如espeak或sapi。可以这样做:

import pyttsx3

engine = pyttsx3.init('espeak')
engine.say("Hello World!")
engine.runAndWait()

import pyttsx3

engine = pyttsx3.init('sapi')
engine.say("Hello World!")
engine.runAndWait()

此时,无论是espeak还是sapi,都需要按照相应的安装和配置说明进行设置。

结论

在使用Python中的pyttsx3时,如果遇到了音频初始化失败错误,可以尝试多种解决方法。其中,安装pywin32和更改音频驱动程序是最常见的且可靠的解决方法。如果仍然不能解决问题,则可以尝试使用其他音频引擎。