我试图用这段代码用Python 3.4将文本转换为语音,但由于我的计算机的主要语言不是英语(我使用Win7x64),所以语音和口音都是错误的(因为我想让它 "说 "英语)。
import win32com.client
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("Hello, it works!")
那么,有没有一种方法可以改变语音语言(程序的,而不是系统的)呢? 另外,你认为有什么更好的方法可以做到这一点?也许一个模块可以在每个系统上工作?
你的操作系统有可能只带有一种语音,因为它是。有几种方法可以让你使用IPA得到英语的输出 (国际音标语言)和SVSFIsXML作为你的speak call的标志......但我猜你想要的东西不会那么复杂。
我会做的第一件事是抓一个英语语音,如果你还没有的话。(首先进入控制面板->语音识别->文本到语音,看看你的语音选择。如果它写着 "Microsoft Anna - English (United States)",那么,是的,你已经有了一个英文语音。)
如果不是的话,你就得去找别的声音了。微软语音平台--运行时语言(第11版) . 我强烈推荐Microsoft Server Speech Text to Speech Voice (en-US, ZiraPro)作为英文语音。你还需要 微软语音平台--软件开发工具包(SDK)(第11版)。.
老实说,我只是种安装他们所有,因为我认为这很酷。
一旦你已经得到了这些都安装, 我发现得到的声音工作是一个整洁的注册表黑客,我发现在 语音攻击 - 获取免费的备用TTS语音与Win78 64位工作。.
基本上,这需要你做一些字符串替换在你的MS语音平台的声音在你的注册表,所以你看到的在你的
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Speech Serverv11.0/VoicesHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Speech Serverv11.0/Voices
注册表将在。
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Speech/VoicesHKEY_LOCAL_MACHINE/SOFTWARE/Wow6432Node/Microsoft/Speech/Voices。
一旦完成,回到控制面板,看看你安装的所有声音。你应该可以测试所有的声音,即使是不同的语言。如果声音不能播放,那么你安装的声音就不是正确的位子(x86与64)。
现在在 python 中,你必须进行 SetVoice 调用。我一生中从未用python编程,但我想你想要的调用应该是类似 speaker.SetVoice("Microsoft Server Speech Text to Speech Voice (en-US, ZiraPro)")。在你设置了语音之后,当你进行Speak呼叫时,这个语音应该是一直在说话的那个。
如果你已经到了这个地步,而且在控制面板中播放了语音,但在你的代码中没有,那可能是你的程序是32bit64位的或什么的,然后你必须运行回去,重新安装相反的32bit64位的语音,再次运行你的注册编辑,并尝试再次运行你的应用程序。
有点麻烦,但会有回报的。如果你真的发布了你的代码,你必须确保你的声音是客户机注册表的一部分,搞得一团糟,这本身就是一个头痛的问题。
这在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例子中翻译的一般想法。