Python 3.4 - 使用SAPI进行文本到语音转换

时间:2015-07-01 17:30:06

标签: python windows python-3.x sapi

我试图使用此代码将文本转换为使用Python 3.4的语音,但由于我的计算机的主要语言不是英语(我使用的是Win7x64),因此语音和重音是错误的(因为我希望它“说话” “英语)。

import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("Hello, it works!")

那么,有没有办法改变语音/语言(程序,而不是系统)? 另外,你认为有更好的方法吗?也许一个可以在每个系统上工作的模块?

2 个答案:

答案 0 :(得分:4)

有可能你的操作系统只带有一个声音。有几种方法可以使用IPA(国际语音语言)和SVSFIsXML作为你说话中的标志来获得英语声音输出...但我猜你想要的东西不那么复杂

如果你还没有英语语音,我要做的第一件事就是抓住英语。 (首先进入您的控制面板 - >语音识别 - > 文本到语音,看看你的语音选择。如果它说“Microsoft Anna - English(United States)”那么,是的,你已经有了英语发音。

如果不是,你将不得不抓住另一个声音Microsoft Speech Platform - Runtime Languages (Version 11) 。我强烈推荐Microsoft Server Speech Speech to Speech Voice(en-US,ZiraPro)作为英语语音。您还需要Microsoft Speech Platform - Software Development Kit (SDK) (Version 11)

老实说,我只是安装它们因为我觉得很酷。

一旦你安装了所有这些,我发现让我的声音工作的是我在Voice Attack - Getting free alternate TTS voices working with Win7/8 64bit找到的一个整洁的注册表黑客。

基本上这需要你在注册表中的MS Speech Platform语音中做一些字符串替换,以便你在

中看到的内容

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Speech Server \ v11.0 \ Voices HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Speech Server \ v11.0 \ Voices

注册管理机构将结束:

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\语音\音色 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微软\语音\音色

完成后,返回控制面板并查看您安装的所有声音。你应该能够测试它们,即使是在不同的语言中。如果声音没有播放,那么你安装的声音不正确(x86 vs 64)。

现在在python中你必须进行一次SetVoice调用。我从来没有在python中编程,但我想你想要的电话看起来像speaker.SetVoice(“Microsoft Server Speech Text to Speech Voice(en-US,ZiraPro)”)。设置语音后,当您拨打Speak电话时,该语音应该是所有语音。

现在,如果你已经达到了这一点,并且在控制面板中播放的声音却没有在你的代码中播放,可能是你的程序是32bit / 64bit或者其他东西,然后你必须跑回来,重新安装相反的32bit / 64位语音,再次运行您的注册编辑,然后再次尝试运行您的应用程序。

一些工作,但它会得到回报。如果你确实分发了你的代码,你必须确保你的声音是客户注册表的一部分,并且弄乱它本身就很麻烦。

答案 1 :(得分:0)

这在python中有效。

随时使其更加优雅。

import win32com.client as wincl

speaker_number = 1
spk = wincl.Dispatch("SAPI.SpVoice")
vcs = spk.GetVoices()
SVSFlag = 11
print(vcs.Item (speaker_number) .GetAttribute ("Name")) # speaker name
spk.Voice
spk.SetVoice(vcs.Item(speaker_number)) # set voice (see Windows Text-to-Speech settings)
spk.Speak("Hello, it works!")

这还应该提供有关如何从SDK示例进行翻译的一般思路。