我在python中使用TTS。 (pyttsx库)。 我在文档中读到我可以获得属性率,语音,声音,音量。在文档中我只能为速率,语音,音量设置属性。这意味着我无法设置属性“声音”?我对声音感兴趣,因为它包含年龄,性别,语言等。 文档:http://pyttsx.readthedocs.io/en/latest/engine.html#pyttsx.voice.Voice
我可以轻松使用率,语音,音量,例如:
engine = pyttsx.init()
engine.getProperty('rate')
engine.getProperty('volume')
engine.setProperty('rate', 50)
engine.setProperty('volume', 0.25)
engine.say("something")
engine.runAndWait()
问题是。是否有机会改变说话声音的“gander”,“age”或“language”?如果有,请给我一个如何做的例子,因为我完全没有想法。
有一个使用voices.id的例子,实际上是在声音内部,但它没有帮助我:
engine = pyttsx.init()
voices = engine.getProperty('voices')
for voice in voices:
engine.setProperty('voice', voice.id)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
抱歉打扰你,谢谢: - )
答案 0 :(得分:2)
我在尝试解决完全相同的问题时发现了这个问题。 经过一些试验,对文档进行更仔细的检查后,我清楚这些属性与系统中安装的声音有关(在文档中称为 "The Voice metadata"),因此您无法修改它们,仅出于信息目的或其他“只读”原因阅读它们。
答案 1 :(得分:1)
我希望这会有所帮助。 我也使用pyttsx,在win7操作系统上使用Python, 我正在研究一个小型AI,以pyttsx作为语音输出。
pyttsx语音选择课适用于SAPI5语音, 在这里找到; 从开始按钮,键入并运行regedit.exe ' HKEY_LOCAL_MACHINE \ SOFTWARE \微软\语音\音色\令牌\'
Win7只包含一个声音(MS-Anna)
在微软,还有更多选择; http://www.microsoft.com/en-us/download/details.aspx?id=27224
MSSpeech_TTS_en-CA_Heather MSSpeech_TTS_en-GB_Hazel MSSpeech_TTS_en-IN_Heera MSSpeech_TTS_en-US_Helen MSSpeech_TTS_en-US_ZiraPro MSSpeech_TTS_en-AU_Hayley
但是,您也可以下载并安装eSpeak。 安装过程中可能会安装许多SAPI5语音, 并且可以根据需要重复安装。 目录中有很好的文档。 使用pyttsx,您可以直接选择要使用的任何语音。 因此,要获得“令牌”中的SAPI5语音ID。目录
speech_engine = pyttsx.init()
voices = speech_engine.getProperty('voices')
for voice in voices:
print 'voice', voice.id
#speech_engine.setProperty('voice', voice.id)
#speech_engine.say('The quick brown fox')
# here I find I have installed just 1 eSpeak voice into the Tokens DIR;
anna_voice = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\MS-Anna-1033-20-DSK'
male_voice_1 = 'HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices\\Tokens\\eSpeak'
#=====
rate = speech_engine.getProperty('rate')
# the rate should be signed + for faster or - for slower
speech_engine.setProperty('rate', rate-85)
#=====
volume = speech_engine.getProperty('volume')
speech_engine.setProperty('volume', volume+1.0)
#=====
def speak(input_text):
global talking_yes_or_no
i = ''
txt_list = list(input_text)
if len(txt_list) > 0:
for i in txt_list:
if i == '':
txt_list.remove(i)
txt = ''.join(txt_list)
if txt != "":
speech_engine.say(txt)
speech_engine.runAndWait()
#=====
def use_anna_voice():
speech_engine.setProperty('voice', anna_voice)
#=====
def use_male_voice_1():
speech_engine.setProperty('voice', male_voice_1)
#=====
#use_male_voice()
#speak('hello')
答案 2 :(得分:0)
engine.setProperty('voice', voices[1].id) # voice 选择 [0] 为男性。