如何让 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】:

结合以下来源,以下代码仅使用 platformos 模块即可在 Windows、Linux 和 macOS 上运行:

cantdutchthis' answer 用于 mac 命令 natka_m's comment 用于 Ubuntu 命令 BananaAcid's answer 用于 Windows 命令 Louis Brandy's answer 了解如何检测操作系统 nc3b's answer 了解如何检测 Linux 发行版
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 说话的主要内容,如果未能解决你的问题,请参考以下文章

如何让多个 Flux 应用程序说话?

如何让我的网络浏览器以编程方式说话?

如何在 Python 中实现 Microsoft 说话人识别/验证 API?

如何让图片开口说话 3DMeNow教程

浅谈「数据可视化」:如何让数据说话

如何让基于 Python 的 Discord Bot 随机播放不同的声音?