73

我怎样才能让 Python 说出一些文字?

我可以将 Festival 与 subprocess 一起使用,但我无法控制它(或者可能在交互模式下,但它不会是干净的)。

有 Python TTS 库吗?像 Festival、eSpeak、... 的 API 一样?

4

14 回答 14

39

您应该尝试使用 PyTTSx 包,因为 PyTTS 已过时。PyTTSx 适用于 Python 2。对于 Python 3,请安装 PyTTSx3 包。

http://pypi.python.org/pypi/pyttsx/

https://pypi.org/project/pyttsx3/

于 2009-12-01T17:30:43.593 回答
37

有点俗气,但是如果您使用 mac,您可以将终端命令从 python 传递到控制台。

尝试在终端中输入以下内容:

$ say 'hello world' 

并且将有来自 mac 的声音会说出来。从python这样的事情是相对容易的:

import os
os.system("echo 'hello world'")
os.system("say 'hello world'") 
于 2013-08-25T11:27:23.630 回答
30

安装 pip 安装 pypiwin32

如何使用 Windows PC 的文本转语音功能

from win32com.client import Dispatch

speak = Dispatch("SAPI.SpVoice").Speak

speak("Ciao")

使用 google text-to-speech Api 创建 mp3 并收听

在 cmd 中安装 gtts 模块后: pip install 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")
于 2016-10-30T08:33:59.147 回答
16

python-espeak包在 Debian、Ubuntu、Redhat 和其他 Linux 发行版中可用。它有最近的更新,并且工作正常。

from espeak import espeak
espeak.synth("Hello world.")

Jonathan Leaders 指出它也适用于 Windows,您也可以安装 mbrola 语音。请参阅http://espeak.sourceforge.net上的 espeak 网站

于 2014-06-07T19:00:41.610 回答
10

一个简单的谷歌引导我到pyTTS,以及一些关于它的文档。然而,它看起来没有维护并且特定于微软的语音引擎。

至少在 Mac OS X 上,您可以使用subprocess调用say命令,这对于与您的同事打交道很有趣,但对于您的需求可能不是非常有用。

听起来 Festival 也有一些公共 API:

Festival 提供了一个基于 BSD 套接字的接口。这允许 Festival 作为服务器运行并允许客户端程序访问它。基本上,服务器为每个附加到它的客户端提供了一个新的命令解释器。服务器为每个客户端分叉,但这比等待 Festival 进程从头开始要快得多。服务器也可以在更大的机器上运行,提供更快的合成。 链接的

还有一个功能齐全的 C++ API,您可以用它制作 Python 模块(这很有趣!)。Festival 还提供了一个精简的 C API——在该文档中继续滚动——你可以一次性扔掉ctypes它。

也许你已经发现了市场上的一个漏洞?

于 2009-10-23T15:08:45.573 回答
8

有很多方法可以让 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()

我希望这有帮助!:)

于 2018-05-30T06:52:28.550 回答
6

PYTTSX3

什么:

Pyttsx3是一个 python 模块,它是pyttsx的现代克隆,修改为最新版本的 Python 3!

为什么:

它是多平台的,可以离线工作,并且正在/仍在开发中,并且可以与任何 Python 版本一起使用

如何:

它可以轻松安装,pip install pyttsx3使用方法与 pyttsx 相同:

import pyttsx3;
engine = pyttsx3.init();
engine.say("I will speak this text");
engine.runAndWait();

我认为这肯定是最好的多平台选择

于 2018-05-06T02:48:55.313 回答
3

您可以使用espeak使用 python 进行文本到语音转换器。
这是一个示例python代码

    从子流程导入调用
    演讲=“你好世界!”
    通话([“说话”,演讲])

PS:如果你的linux系统上没有安装espeak,那么你需要先安装它。
打开终端(使用 ctrl + alt + T)并输入

    sudo apt install espeak
于 2017-01-26T10:11:22.650 回答
3

我更喜欢使用 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()。

于 2020-10-15T08:36:07.730 回答
2

可能没有任何“特定于 Python”的东西,但 KDE 和 GNOME 桌面提供文本转语音作为其可访问性支持的一部分,并且还提供 Python 库绑定。可以使用 python 绑定来控制文本到语音的桌面库。

如果在 JVM 上使用 Python 的 Jython 实现,FreeTTS系统可能是可用的。

最后,OSXWindows具有用于文本到语音的原生 API。可以通过 ctypes 或其他机制(如 COM)从 python 使用这些。

于 2009-10-23T15:19:27.487 回答
2

如果您使用的是 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 上找到了这个视频,所以如果你真的想要,你可以找一个你认识的人,制作你自己的 DIY tts 声音。

于 2017-08-11T04:21:47.663 回答
1

这就是你要找的。适用于 Mac 的完整 TTS 解决方案。您可以将此独立使用或用作 Web 应用程序的托管 Mac 服务器:

http://wolfpaulus.com/jounal/mac/ttsserver/

于 2014-07-05T22:03:15.147 回答
0

platform结合以下来源,以下代码仅使用andos模块可在 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)

注意:此方法不安全,可能会被恶意文本利用。

于 2019-11-30T17:13:17.577 回答
0

只需在 python 中使用这个简单的代码。

仅适用于 Windows 操作系统。

from win32com.client import Dispatch

def speak(text):
    speak = Dispatch("SAPI.Spvoice")
    speak.Speak(text)

speak("How are you dugres?")

我个人使用这个。

于 2020-12-19T13:25:45.510 回答