【问题标题】:How to make Python speak如何让 Python 说话
【发布时间】:2010-12-09 12:01:49
【问题描述】:

如何让 Python 说出一些文字?

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

是否有 Python TTS 库?像 Festival、eSpeak 等 API 一样?

【问题讨论】:

  • “Festival”有公共 API 吗?
  • 对于文本到语音,我在 Python 中发现了这个名为 "gTTS" 的包。你可以试试这个。它确实适用于 Python 3.5。这个包的 github repo 是gTTS-github

标签: python text-to-speech


【解决方案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 版本强>

        如何:

        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 系统可能可用。

            最后,OSXWindows 拥有用于文本到语音的原生 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 上运行:

                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?")
                  

                  我个人使用这个。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2019-08-23
                    • 2019-01-15
                    • 2022-01-15
                    • 2015-04-07
                    • 2019-08-07
                    • 1970-01-01
                    相关资源
                    最近更新 更多