关于文字转语音:如何让Python说话

How to make Python speak

我如何让Python说一些文字?

我可以在子进程中使用Festival,但是我将无法控制它(或者可能在交互模式下,但它不是干净的)。

有Python TTS库吗? 就像节日的API一样,eSpeak,...?


请注意,这仅适用于python 2.x

由于PyTTS已过时,因此您应尝试使用PyTTSx软件包。 PyTTSx使用最新的python版本。

http://pypi.python.org/pypi/pyttsx/1.0->程序包

希望能帮助到你


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

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

1
$ say 'hello world'

Mac会发出声音,说出这一点。从python这样的事情相对容易:

1
2
3
import os
os.system("echo 'hello world'")
os.system("say 'hello world'")


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

1
2
3
4
5
from win32com.client import Dispatch

speak = Dispatch("SAPI.SpVoice")

speak.Speak("Ciao")

使用Google文本语音Api创建mp3并收听

在cmd中安装gtts模块后:
点安装gtts

1
2
3
4
5
6
7
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")


python-espeak软件包在Debian,Ubuntu,Redhat和其他Linux发行版中可用。它具有最新更新,并且运行良好。

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

Jonathan Leaders指出它也可以在Windows上运行,您也可以安装mbrola声音。请访问espeak网站,网址为http://espeak.sourceforge.net


一个简单的Google引导我使用pyTTS,以及有关它的一些文档。但是,它看起来没有维护,并且特定于Microsoft的语音引擎。

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

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

Festival提供了基于BSD套接字的接口。这使Festival可以作为服务器运行,并允许客户端程序对其进行访问。基本上,服务器为连接到它的每个客户端提供一个新的命令解释器。服务器是为每个客户端分叉的,但这比必须等待Festival进程从头开始要快得多。服务器也可以在更大的计算机上运行,??从而提供更快的综合速度。林克

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

也许您发现了市场上的漏洞?


有很多方法可以使Python在Python3和Python2中都可以使用,其中两种很棒的方法是:

  • 使用操作系统

如果您使用的是Mac,您将在计算机中内置os模块。您可以使用以下命令导入os模块:

1
import os

然后,您可以使用os使用os.system命令来运行终端命令:

1
os.system("Your terminal")

在终端中,使计算机发言的方式是使用" say"命令,因此,只需使用以下命令即可使计算机发言:

1
os.system("say 'some text'")

如果您想使用它来说一个变量,可以使用:

1
os.system("say" + myVariable)

让python说话的第二种方法是使用

  • pyttsx模块

您将必须使用安装

1
pip isntall pyttsx3

或对于Python3

1
pip3 install pyttsx3

然后,您可以使用以下代码说出它:

1
2
3
4
5
6
import pyttsx3
engine = pyttsx3.init()

engine.say("Your Text")

engine.runAndWait()

我希望这有帮助! :)


PYTTSX3!
什么:

Pyttsx3是一个python模块,是pyttsx的现代克隆,经过修改可在最新版本的Python 3中完美地运行!

  • 用于下载的Python软件包索引:https://pypi.python.org
  • 有关源代码,错误和问答的GitHub:https://github.com/nateshmbhat/pyttsx3
  • 阅读完整文档,网址为:https://pyttsx3.readthedocs.org

为什么:

它是100%的多平台并且可以离线工作,并且可以在任何PYTHON版本上进行活跃/仍处于开发和工作状态

怎么样:

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

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

这是最好的多平台选择!


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

1
2
3
    from subprocess import call
    speech="Hello World!"
    call(["espeak",speech])

附言:如果您的linux系统上未安装espeak,则需要先安装它。
打开终端(使用ctrl + alt + T)并输入

1
    sudo apt install espeak


如果您使用的是python 3和Windows 10,我发现有效的最佳解决方案是Giovanni Gianni。这对我来说是男性的声音:

1
2
3
import win32com.client as wincl
speak = wincl.Dispatch("SAPI.SpVoice")
speak.Speak("This is the pc voice speaking")

我也在youtube上找到了该视频,因此,如果您真的愿意,可以找一个认识的人,并发表自己的DIY tts声音。


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

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

最后,OSX和Windows具有用于文本到语音的本机API。可能可以通过ctypes或其他机制(例如COM)从python使用它们。


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

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


我更喜欢使用Google Text To Speech库,因为它的声音更自然。

1
2
3
4
5
from gtts import gTTS
def speak(text):
  tts = gTTS(text=text, lang="en")
  filename ="voice.mp3"
  tts.save(filename)

有一个限制。 gTTS只能将文本转换为语音并保存。因此,您将不得不找到另一个模块或函数来播放该文件。 (例如:playsound)

Playsound是一个非常简单的模块,具有一个功能,即播放声音。

1
2
3
import playsound
def play(filename):
  playsound.playsound(filename)

保存mp3文件后,可以直接调用playsound.playsound()。


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

  • mac命令的cantdutchthis'答案
  • natka_m对Ubuntu命令的注释
  • BananaAcid对于Windows命令的答案
  • Louis Brandy关于如何检测操作系统的答案
  • nc3b关于如何检测Linux发行版的答案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)

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