如何在PYTTS中设置属性:年龄,性别或语言(Python)

时间:2016-08-17 09:30:09

标签: python python-2.7 text-to-speech pyttsx

我在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()
抱歉打扰你,谢谢: - )

3 个答案:

答案 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] 为男性。