【问题标题】:Listening to the Output of a Web Application监听 Web 应用程序的输出
【发布时间】:2012-04-03 07:19:50
【问题描述】:

我一直在尝试使用here (http://www.ispeech.org/text.to.speech.demo.php) 找到的 Web 应用程序来制作一个可以大声朗读文本的程序,但徒劳无功。这是一个演示文本到语音的程序,效果很好,而且速度相对较快。我想做的是制作一个 Python 程序,将文本输入应用程序,然后输出结果。在这种情况下,结果将是合理的。 Python中有没有办法做到这一点,比如图书馆?如果没有,是否有可能通过任何其他方式做到这一点?我查看了 iSpeech API(找到 here),但唯一的问题是免费使用的数量有限(我相信它是 200)。虽然这个程序只打算使用几次,但我希望它能够使用该服务超过 200 次。另外,如果这个解决方案不切实际,谁能指导我另一种选择?

@AKX 我目前正在使用 eSpeak,它运行良好。只是,嗯,听起来不太好,有时很难说出在说什么。

【问题讨论】:

  • 您的问题具体是关于如何使用 python 生成文本到语音 -> 文件,还是关于如何通过 Web 应用程序传递内容?我不知道该用哪种方式回答。
  • 有两种表达方式:1. 如何使用 Python 生成清晰的语音或 2. 使用 Python 流式传输已经执行此操作的 Web 应用程序的输出。

标签: python web text-to-speech


【解决方案1】:

如果不需要使用 iSpeech,有一个不错的(它肯定不像许多商业解决方案那样精美)开源文本到语音转换解决方案,称为 eSpeak

它可以在命令行中使用(subprocess 使用 Python),也可以作为共享库使用。似乎还有一个Python wrapper (python-espeak)

希望这会有所帮助。

【讨论】:

  • 我目前正在使用 eSpeak,而且效果很好。只是,嗯,听起来不太好,有时很难说出在说什么。
【解决方案2】:

好的。我找到了一种方法,似乎工作正常。感谢所有帮助过的人!这是我正在使用的代码:

from urllib import quote_plus

def speak(text): 
    import pydshow 
    words = text.split() 
    temp = [] 
    stuff = [] 
    while words: 
        temp.append(words.pop(0)) 
        if len(temp) == 24: 
            stuff.append(' '.join(temp)) 
            temp = [] 
    stuff.append(' '.join(temp)) 
    for i in stuff: 
        pydshow.PlayFileWait('http://api.ispeech.org/api/rest?apikey=8d1e2e5d3909929860aede288d6b974e&format=mp3&action=convert&voice=ukenglishmale&text='+quote_plus(i))

if __name__ == '__main__':
       speak('Hello. This is a text-to speech test.')

我觉得这很理想,因为它确实使用了 API,但它使用了用于演示程序的 API 密钥。因此,它永远不会用完。密钥是8d1e2e5d3909929860aede288d6b974e

您可以在没有程序的情况下在工作中实际测试这个,方法是在地址栏中输入以下内容:

http://api.ispeech.org/api/rest?apikey=8d1e2e5d3909929860aede288d6b974e&format=mp3&action=convert&voice=ukenglishmale&text=

后面是您要说的文字。您还可以通过将ukenglishmale 更改为 iSpeech 提供的其他内容来调整语言。例如,ukenglishfemale。这将使用相同的文本,但使用女性声音。

注意:Pydshow 是我对 DirectShow 的封装。你可以改用你的。

【讨论】:

    【解决方案3】:

    您的应用程序流程是这样的:

    1. 客户端:用户在表单中输入文本,表单向服务器提交请求
    2. 服务器:可以是 python 或任何你想要的语言/框架。接收带有文本的 http 请求。
    3. 服务器:使用纯 Python 库或通过将子进程运行到可以将语音生成为 wav/mp3/aiff/etc 的实用程序运行文本到语音转换
    4. 服务器:通过 MIME 类型的流式文件将 HTTP 响应发送回客户端
    5. 客户端:接收http响应并播放内容

    具体关于第 3 步...

    我对可用的最清晰的开源语音合成软件没有任何特别的建议,但我可以说它不一定是纯 Python,甚至根本就不是 Python。这些软件包中的大多数都有某种形式的命令行实用程序来获取标准输入或文件并生成音频文件作为输出。您只需将此实用程序作为子进程启动以生成文件,然后将文件流式传输回您的 http 响应中。

    如果您决定使用通过 API (iSpeech) 提供文本转语音的现有 Web 服务,则步骤 3 将替换为向 iSpeech 发出您自己的服务器端 http 请求并接收响应并且几乎将该响应转发回原始客户端请求,例如代理。我想说的好处是不必维护自己的语音合成解决方案或从开源获得更好的质量......但缺点是你的响应时间可能会有更多的延迟,因为你的服务器有发出自己的外部http请求并首先下载数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-27
      • 2018-07-17
      • 1970-01-01
      • 2015-10-18
      • 2019-03-29
      • 2014-10-19
      相关资源
      最近更新 更多