如何让 Python 说话
Posted
技术标签:
【中文标题】如何让 Python 说话【英文标题】:How to make Python speak 【发布时间】:2010-12-09 12:01:49 【问题描述】:如何让 Python 说出一些文字?
我可以将 Festival 与子进程一起使用,但我无法控制它(或者可能在交互模式下,但它不会是干净的)。
是否有 Python TTS 库?像 Festival、eSpeak 等 API 一样?
【问题讨论】:
“Festival”有公共 API 吗? 对于文本到语音,我在 Python 中发现了这个名为 "gTTS" 的包。你可以试试这个。它确实适用于 Python 3.5。这个包的 github repo 是gTTS-github。 【参考方案1】:您应该尝试使用 PyTTSx 包,因为 PyTTS 已过时。 PyTTSx 适用于 Python 2。对于 Python 3,请安装 PyTTSx3 包。
http://pypi.python.org/pypi/pyttsx/
https://pypi.org/project/pyttsx3/
【讨论】:
不适用于 python 3。这个答案是 2009 年最新的 尽管可通过 pip 获得,但截至 2015 年仍无法使用 我确认它不适用于 python3 并且简单的修复(printf 作为一个函数,修复异常处理语法和修复导入)不能让它工作,它只是默默地失败。与 espeak 接口(它在 Linux 上的作用)就像生成一个子进程一样简单,所以这就是我最终要做的。 刚刚在问题的顶部添加了一条评论,指出这只适用于 Python 2.x PYTTSX3 也适用于 python 3。这是一个很酷的模块【参考方案2】:有点俗气,但如果你使用 mac,你可以将终端命令从 python 传递到控制台。
尝试在终端中输入以下内容:
$ say 'hello world'
Mac 会发出声音来说话。从python这样的事情是比较容易的:
import os
os.system("echo 'hello world'")
os.system("say 'hello world'")
【讨论】:
我不希望say
命令阻止我的 Python 代码,所以我添加了一个像这样的 & 符号:os.system("say 'hello world' &")
在 ubuntu 上,要使用的终端命令是 spd-say
【参考方案3】:
安装 点安装 pypiwin32
如何使用 Windows PC 的文字转语音功能
from win32com.client import Dispatch
speak = Dispatch("SAPI.SpVoice").Speak
speak("Ciao")
使用 google text-to-speech Api 创建 mp3 并收听
在 cmd 中安装 gtts 模块后: 点安装gtts
from gtts import gTTS
import os
tts = gTTS(text="This is the pc speaking", lang='en')
tts.save("pcvoice.mp3")
# to start the file from python
os.system("start pcvoice.mp3")
【讨论】:
您可以通过以管理员身份运行pip install pypiwin32
在系统中安装所需的模块。
Google 解决方案似乎是最好的解决方案之一:允许更改语言,速度也非常快。
奇怪的是,第一个代码示例适用于某些 Windows 10 电脑,但不适用于其他电脑。这是为什么呢?
@ColorCodin 我不确定,但你应该检查控制面板,合成语音(我不记得这个选项的确切名称),看看它是否已设置...有一个按钮,您可以按下以查看它是否有效。如果它在设置中工作,应该与代码一起工作,因为我认为它使用的是 windows 合成语音。
已经设置好了,但是当命令通过 CMD 运行时,它说“访问被拒绝。”【参考方案4】:
python-espeak 软件包可用于 Debian、Ubuntu、Redhat 和其他 Linux 发行版。它有最近的更新,并且运行良好。
from espeak import espeak
espeak.synth("Hello world.")
Jonathan Leaders 指出它也适用于 Windows,而且您也可以安装 mbrola 语音。请参阅 espeak 网站http://espeak.sourceforge.net
【讨论】:
【参考方案5】:一个简单的谷歌引导我到pyTTS,还有一些documents about it。然而,它看起来没有维护,并且是特定于 Microsoft 的语音引擎的。
至少在 Mac OS X 上,您可以使用 subprocess
调用 say
命令,这对于与您的同事打交道很有趣,但可能对您的需求没有太大用处。
听起来 Festival 也有一些公共 API:
Festival 提供了一个基于 BSD 套接字的接口。这允许 Festival 作为服务器运行并允许客户端程序访问它。基本上,服务器为每个附加到它的客户端提供一个新的命令解释器。服务器为每个客户端分叉,但这比等待 Festival 进程从头开始要快得多。服务器也可以在更大的机器上运行,提供更快的合成速度。 linky
还有一个full-featured C++ API,您可以用它制作一个 Python 模块(这很有趣!)。 Festival 还提供了一个精简的 C API - 继续在该文档中滚动 - 您可以一次性将 ctypes
扔给它。
也许您发现了市场上的漏洞?
【讨论】:
【参考方案6】:有很多方法可以让 Python 在 Python3 和 Python2 中使用,其中两个很好的方法是:
使用操作系统如果您使用的是 mac,您的计算机中将内置 os 模块。您可以使用以下方式导入 os 模块:
import os
然后您可以使用 os 使用 os.system 命令运行终端命令:
os.system("Your terminal")
在终端中,让电脑说话的方式是使用“say”命令,因此让电脑说话你只需使用:
os.system("say 'some text'")
如果你想用这个来表达一个变量,你可以使用:
os.system("say " + myVariable)
让python说话的第二种方法是使用
pyttsx 模块你必须使用安装它
pip isntall pyttsx3
或用于 Python3
pip3 install pyttsx3
然后您可以使用以下代码让它说话:
import pyttsx3
engine = pyttsx3.init()
engine.say("Your Text")
engine.runAndWait()
我希望这会有所帮助! :)
【讨论】:
【参考方案7】:PYTTSX3!
什么:
Pyttsx3 是一个 Python 模块,它是 pyttsx 的现代克隆,使用最新版本的 Python 3 修改!
Python 包索引 供下载:https://pypi.python.org GitHub 获取源代码、错误和问答:https://github.com/nateshmbhat/pyttsx3 阅读完整文档:https://pyttsx3.readthedocs.org为什么:
它是多平台和离线工作并且正在活动/仍在开发中和适用于任何 Python 版本强>
如何:
用pip install pyttsx3
可以轻松安装,用法和pyttsx一样:
import pyttsx3;
engine = pyttsx3.init();
engine.say("I will speak this text");
engine.runAndWait();
我认为这无疑是最好的多平台选择
【讨论】:
有没有推荐的异步方式? @AnatolyAlekseev 不,似乎没有。只需使用 asyncio 或者我猜你在 python 中这样做。【参考方案8】:您可以通过 python 使用 espeak 进行文本到语音转换器。 这是一个示例python代码
从子流程导入调用 演讲=“你好世界!” 通话([“说话”,演讲])P.S : 如果您的 linux 系统上没有安装 espeak,那么您需要先安装它。 打开终端(使用 ctrl + alt + T)并输入
sudo apt install espeak【讨论】:
【参考方案9】:我更喜欢使用 Google Text To Speech 库,因为它的声音更自然。
from gtts import gTTS
def speak(text):
tts = gTTS(text=text, lang="en")
filename = "voice.mp3"
tts.save(filename)
有一个限制。 gTTS 只能将文本转换为语音并保存。所以你必须找到另一个模块或函数来播放那个文件。 (例如:播放声音)
Playsound 是一个非常简单的模块,只有一个功能,就是播放声音。
import playsound
def play(filename):
playsound.playsound(filename)
你可以在保存mp3文件后直接调用playsound.playsound()。
【讨论】:
【参考方案10】:可能没有任何“特定于 Python”的内容,但 KDE 和 GNOME 桌面提供文本转语音作为其可访问性支持的一部分,并且还提供 Python 库绑定。 可以使用 python 绑定来控制桌面库的文本到语音。
如果在 JVM 上使用 Python 的 Jython 实现,FreeTTS 系统可能可用。
最后,OSX 和 Windows 拥有用于文本到语音的原生 API。可以通过 ctypes 或其他机制(如 COM)从 python 中使用这些。
【讨论】:
【参考方案11】:如果您使用的是 python 3 和 windows 10,那么我发现的最佳解决方案来自 Giovanni Gianni。这是为我播放的男声:
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
speak.Speak("This is the pc voice speaking")
我还在 youtube 上找到了这个 video,所以如果你真的想要,你可以找一个你认识的人,制作你自己的 DIY tts 声音。
【讨论】:
有没有办法让它与其他语言(日语或中文?)一起工作【参考方案12】:这就是你要找的。适用于 Mac 的完整 TTS 解决方案。 您可以将此独立使用或用作 Web 应用程序的托管 Mac 服务器:
http://wolfpaulus.com/jounal/mac/ttsserver/
【讨论】:
【参考方案13】:结合以下来源,以下代码仅使用 platform
和 os
模块即可在 Windows、Linux 和 macOS 上运行:
tx = input("Text to say >>> ")
tx = repr(tx)
import os
import platform
syst = platform.system()
if syst == 'Linux' and platform.linux_distribution()[0] == "Ubuntu":
os.system('spd-say %s' % tx)
elif syst == 'Windows':
os.system('PowerShell -Command "Add-Type –AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak(%s);"' % tx)
elif syst == 'Darwin':
os.system('say %s' % tx)
else:
raise RuntimeError("Operating System '%s' is not supported" % syst)
注意:此方法不安全,可能会被恶意文本利用。
【讨论】:
【参考方案14】:只需在 python 中使用这个简单的代码。
仅适用于 Windows 操作系统。
from win32com.client import Dispatch
def speak(text):
speak = Dispatch("SAPI.Spvoice")
speak.Speak(text)
speak("How are you dugres?")
我个人使用这个。
【讨论】:
以上是关于如何让 Python 说话的主要内容,如果未能解决你的问题,请参考以下文章