1

我在 python 中使用 TTS。(pyttsx 库)。我在文档中读到我可以获得属性 rate、voice、voices和 volume。在文档中只是关于我只能为速率、语音、音量设置属性。这意味着我不能设置属性“声音”?我对声音感兴趣,因为它包含年龄、性别、语言等。这里的文档: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()

问题是。是否有机会改变说话声音的“性别”、“年龄”或“语言”?如果有,请给我一个如何做的例子,因为我完全没有想法。

有一个使用 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()

很抱歉打扰你,谢谢:-)

4

3 回答 3

2

我在尝试解决完全相同的问题时发现了这个问题。经过一些试验,对文档进行更仔细的检查后,我清楚地知道这些属性与系统中已安装的语音相关(在文档中称为“语音元数据”),因此您无法修改它们,仅出于获取信息或其他“只读”原因而阅读它们。

于 2021-01-21T14:11:08.497 回答
1

我希望这有帮助。我还使用 pyttsx,在 win7 操作系统上使用 Python,我正在研究一个小型 AI,使用 pyttsx 作为语音输出。

pyttsx 语音选择类适用于 SAPI5 语音,可在此处找到;从开始按钮,键入并运行 regedit.exe 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\'

Win7 仅包含 1 个语音(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')
于 2016-11-17T22:09:45.677 回答
0

engine.setProperty('voice', voices[1].id) # 男性语音选择 [0]。

于 2021-01-10T05:17:48.280 回答