如何让Python说话


68

如何让Python说些文字?

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

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


“节日”是否具有公共API?
jldupont

对于文本语音转换,我在Python中找到了名为gTTS ”的软件包。您可以尝试一下。它确实适用于Python 3.5。该软件包的github仓库gTTS-github
Harshdeep Sokhey

Answers:


36

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

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

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

希望能帮助到你


5
不适用于python3。此答案截止到2009年
Jonathan

4
尽管可以通过点子获取信息,但截至2015
Dex

我确认它不适用于python3,并且简单的修复(printf作为函数,修复异常处理语法和修复导入)无法使其正常工作,只是简单地失败了。与espeak交互(在Linux上做什么)就像生成一个子进程一样简单,所以我最终要做的是。
莱奥Germond

1
刚刚在问题的顶部添加了一条注释,以指出这仅适用于Python 2.x
masterLoki

34

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

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

$ say 'hello world' 

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

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

6
我不想让该say命令阻止我的Python代码,所以我添加了一个&符:os.system("say 'hello world' &")
VinceFior

在ubuntu上,要使用的终端命令是spd-say
natka_m

28

安装pip安装pypiwin32

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

from win32com.client import Dispatch

speak = Dispatch("SAPI.SpVoice")

speak.Speak("Ciao")

使用Google文本语音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")

2
您可以通过pip install pypiwin32以administartor身份运行在系统中安装所需的模块。
卡米尔·索佐

1
Google解决方案似乎是最好的解决方案之一:允许更改语言,而且速度也很快。
snoob dogg

奇怪的是,第一个代码示例在某些Windows 10 PC上可用,但在其他Windows 10 PC上却不可用。这是为什么?
ColorCodin '18年

1
@ColorCodin我不确定,但您应该在控制面板中检查合成语音(我不记得该选项的确切名称),然后查看是否已设置...有一个按钮可以按一下看看是否可行。如果它在设置中有效,则应该使用代码,因为我认为它使用Windows合成语音。
Giovanni G. PY

已经设置好了,但是当命令通过CMD运行时,显示“拒绝访问”。
ColorCodin '18年

16

蟒-espeak的包可在Debian中的,Ubuntu,红帽和其他Linux发行版。它具有最新更新,并且运行良好。

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

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


9

一个简单的Google引导我进入pyTTS,并找到了一些有关它的文件。但是,它看起来没有维护,并且特定于Microsoft的语音引擎。

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

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

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

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

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


6

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

  • 使用操作系统

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

import os

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

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()

我希望这有帮助!:)


4

PYTTSX3

什么:

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

为什么:

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

怎么样:

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

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

这是最好的多平台选择!


有没有建议的方式让您说异步?
阿纳托利·阿列克谢

@AnatolyAlekseev不,似乎没有一个。只需使用asyncio即可,但是我猜您可以在python中进行。
Toby56 '11

3

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

    从子流程导入调用
    speech =“ Hello World!”
    通话([[espeak],speech])

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

    sudo apt安装espeak

2

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

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

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


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声音。


有没有办法
使它


1

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

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

import playsound
def play(filename):
  playsound.playsound(filename)

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


0

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

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


0

只需在python中使用此简单代码即可。

仅适用于Windows OS。

from win32com.client import Dispatch

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

speak("How are you dugres?")

我个人使用这个。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.