【问题标题】:Pyttsx Voice GenderPyttsx 语音性别
【发布时间】:2021-02-22 04:14:28
【问题描述】:

下午好,我正在学习并使用 pyttsx 进行语音,问题是我想将其用作“女性”声音,但我无法使用此代码:

import pyttsx as pt
from pyttsx import voice
engine = pt.init()
voices = engine.getProperty('voices')
#engine.setProperty('gender', 'female') # also does not work
engine.setProperty('female', voice.Voice.gender) #not even
engine.setProperty('female', voice.gender) #does not work
engine.setProperty('voice', voices[4].id)
engine.say("Hello World")
engine.runAndWait()


class Voice(object):
    def __init__(self, id, name=None, languages=[], gender=None, age=None):
        self.id = id
        self.name = name
        self.languages = languages
        self.gender = gender
        self.age = age

【问题讨论】:

    标签: python python-2.7 voice pyttsx


    【解决方案1】:

    我用下面的代码遍历声音找到女声

    import pyttsx
    engine = pyttsx.init()
    voices = engine.getProperty('voices')
    for voice in voices:
       engine.setProperty('voice', voice.id)
       print voice.id
       engine.say('The quick brown fox jumped over the lazy dog.')
    engine.runAndWait()
    

    在我的 Windows 10 机器上,女性声音是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0

    所以我把我的代码改成这样

    import pyttsx
    engine = pyttsx.init()
    engine.setProperty('voice', 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0')
    engine.say('The quick brown fox jumped over the lazy dog.')
    engine.runAndWait() 
    

    【讨论】:

      【解决方案2】:

      如果你使用 linux/espeak...

      在此处更改代码engine.setProperty('voice', 'english+f1')

      你可以通过添加 f1 到 f4 来改变声音

      【讨论】:

        【解决方案3】:

        这是一个更简单的解决方案:

        engine = pyttsx.init()
        voices = engine.getProperty('voices')
        engine.setProperty('voice', voices[1].id)
        

        【讨论】:

          【解决方案4】:

          使用sound=getProperty ('voices'); engine.setProperty('voice','sound [1].id') 这肯定会奏效。男性为 0,女性为 1。

          【讨论】:

            【解决方案5】:

            您必须检查您的计算机是否有其他讲述人选项,请转到控制面板 -> 轻松访问中心 -> 讲述人选项 您可以选择有多少叙述者。 其他选项转到 Windows 搜索旁白。 如果您没有其他用代码编写的旁白,则只能使用默认旁白。

            【讨论】:

              【解决方案6】:

              我使用这个辅助函数来迭代声音。如果存在特定语言和性别的声音,它将变为该声音,否则将引发异常。

              # language  : en_US, de_DE, ...
              # gender    : VoiceGenderFemale, VoiceGenderMale
              def change_voice(engine, language, gender='VoiceGenderFemale'):
                  for voice in engine.getProperty('voices'):
                      if language in voice.languages and gender == voice.gender:
                          engine.setProperty('voice', voice.id)
                          return True
              
                  raise RuntimeError("Language '{}' for gender '{}' not found".format(language, gender))
              

              最后会这样使用:

              engine = pt.init()
              change_voice(engine, "en_US", "VoiceGenderFemale")
              engine.say("Hello World")
              engine.runAndWait()
              

              【讨论】:

                【解决方案7】:
                import pyttsx as pt
                from pyttsx import voice
                engine = pt.init()
                voices = engine.getProperty('voices')
                #engine.setProperty('gender', 'female') # also does not work
                #engine.setProperty('female', voice.Voice.gender) #not even
                #engine.setProperty('female', voice.gender) #does not work
                engine.setProperty('voice', voices[1].id)
                engine.say("Hello World")
                engine.runAndWait
                

                【讨论】:

                • 请解释一下!
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-08-07
                • 2011-11-01
                • 2019-01-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多