4

尝试使用 pyttsx3 时,我只能使用英语语音。我也希望能够使用荷兰语。

我已经在 Windows 设置菜单中安装了文本到语音语言包。但我仍然只能使用聋哑的英语语音。

我怎样才能解决这个问题?

4

2 回答 2

6

如果您想更改一种语言,您需要更改为另一种支持您的语言的“声音”。

  1. 要查看安装了哪些声音/语言,您可以像这样列出它们:
import pyttsx3

engine = pyttsx3.init()

for voice in engine.getProperty('voices'):
    print(voice)
  1. 不,您可以像这样更改为您喜欢的声音:
engine.setProperty('voice', voice.id)

我个人也使用我在这里提到的这个辅助函数

# 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))

最后,您可以像这样使用它(如果安装了语言和性别):

import pyttsx3

engine = pyttsx3.init()
change_voice(engine, "nl_BE", "VoiceGenderFemale")
engine.say("Hello World")
engine.runAndWait()
于 2021-02-21T20:36:04.090 回答
0

在 Windows 上安装另一种语言是不够的。默认情况下,Windows 安装的新“扬声器”只能由 Windows 官方程序访问。您需要授予在 python 代码中使用它的权限。这是通过更改几个注册表文件来完成的(不要在没有备份的情况下执行此操作,或者如果您不确定自己在做什么)。这是一个使用另一种语言的小例子,在这种情况下是希伯来语。至于如何更改注册表的手册,请进入 machine_buddy.get_all_voices(ack=True) 文档,它写在评论中。

import wizzi_utils as wu  # pip install wizzi_utils


def tts():
    # pip install pyttsx3 # needed
    machine_buddy = wu.tts.MachineBuddy(rate=150)
    all_voices = machine_buddy.get_all_voices(ack=True)

    print('\taudio test')
    for i, v in enumerate(all_voices):
        machine_buddy.change_voice(new_voice_ind=i)
        machine_buddy.say(text=v.name)
        if 'Hebrew' in str(v.name):
            t = 'שלום, מה קורה חברים?'
            machine_buddy.say(text=t)
    return


def main():
    tts()
    return


if __name__ == '__main__':
    wu.main_wrapper(
        main_function=main,
        seed=42,
        ipv4=False,
        cuda_off=False,
        torch_v=False,
        tf_v=False,
        cv2_v=False,
        with_pip_list=False,
        with_profiler=False
    )

输出:

    <Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_DAVID_11.0
          name=Microsoft David Desktop - English (United States)
          languages=[]
          gender=None
          age=None>
    <Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSTTS_V110_heIL_Asaf
          name=Microsoft Asaf - Hebrew (Israel)
          languages=[]
          gender=None
          age=None>
    <Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0
          name=Microsoft Zira Desktop - English (United States)
          languages=[]
          gender=None
          age=None>
    audio test
于 2022-02-19T12:44:12.873 回答