好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
pyttsx3 是一个用于文本到语音转换的 Python 库。它允许你将文字转化为语音,并播放出来。
pyttsx3
是一个基于 ESpeak 和 NSSpeechSynthesizer 的 Python 包装器,用于实现文本到语音的转换。底层的工作原理取决于系统和平台,因为它使用了系统中可用的文本到语音引擎。
以下是 pyttsx3
在不同平台上的工作原理:
pyttsx3
使用了 SAPI5(Speech API 5),这是 Windows 提供的本地语音合成引擎。pyttsx3
利用 Python 的 ctypes
模块调用 Windows 上的 SAPI5 接口。pyttsx3
使用了 eSpeak,这是一个开源的文本到语音引擎。 pyttsx3会通过_dlopen打开 libespeak.so来调用语音合成的功能。pyttsx3
使用了 NSSpeechSynthesizer,这是 macOS 提供的语音合成引擎。在每种情况下,pyttsx3
通过调用底层系统的语音合成引擎来实现文本到语音的转换。这样的设计使得 pyttsx3
能够适应不同平台,并使用各个系统上可用的最佳语音合成引擎。
深度学习在语音合成领域也有应用,例如 Tacotron 和 WaveNet 等模型,它们能够生成更自然和高质量的语音。然而,pyttsx3
并不使用这些深度学习模型,而是依赖于本地系统提供的传统的 TTS 引擎。深度学习实现通常需要大量的训练数据和计算资源,而传统的规则和合成方法在一些场景中仍然能够提供良好的效果。
import pyttsx3
import soundcard # 加上这一行就会报错,去掉没事儿
def text_to_speech(text):
= pyttsx3.init()
engine
engine.say(text)
engine.runAndWait()
"hello 你好") text_to_speech(
报错内容如下:
Traceback (most recent call last):
File "D:\program\pven\ship-command\Lib\site-packages\pyttsx3\__init__.py", line 20, in init
eng = _activeEngines[driverName]
~~~~~~~~~~~~~~^^^^^^^^^^^^
File "D:\program\Python311\Lib\weakref.py", line 136, in __getitem__
o = self.data[key]()
~~~~~~~~~^^^^^
KeyError: None
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "d:\project\python\ship-command\test.py", line 10, in <module>
text_to_speech("hello 你好")
File "d:\project\python\ship-command\test.py", line 6, in text_to_speech
engine = pyttsx3.init()
^^^^^^^^^^^^^^
File "D:\program\pven\ship-command\Lib\site-packages\pyttsx3\__init__.py", line 22, in init
eng = Engine(driverName, debug)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\program\pven\ship-command\Lib\site-packages\pyttsx3\engine.py", line 30, in __init__
self.proxy = driver.DriverProxy(weakref.proxy(self), driverName, debug)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\program\pven\ship-command\Lib\site-packages\pyttsx3\driver.py", line 50, in __init__
self._module = importlib.import_module(name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\program\Python311\Lib\importlib\__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1206, in _gcd_import
File "<frozen importlib._bootstrap>", line 1178, in _find_and_load
File "<frozen importlib._bootstrap>", line 1149, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 940, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "D:\program\pven\ship-command\Lib\site-packages\pyttsx3\drivers\sapi5.py", line 1, in <module>
import comtypes.client # Importing comtypes.client will make the gen subpackage
^^^^^^^^^^^^^^^^^^^^^^
File "D:\program\pven\ship-command\Lib\site-packages\comtypes\__init__.py", line 232, in <module>
CoInitializeEx()
File "D:\program\pven\ship-command\Lib\site-packages\comtypes\__init__.py", line 223, in CoInitializeEx
_ole32.CoInitializeEx(None, flags)
File "_ctypes/callproc.c", line 1000, in GetResult
OSError: [WinError -2147417850] 无法在设置线程模式后对其加以更改。
解决
pip uninstall pyttsx3
pip install pyttsx3==2.71