Pyttsx3语音性别(女性)

时间:2019-09-02 04:51:19

标签: python-3.x pyttsx

我测试了文本语音转换模块,即pyttsx3,它工作正常,但是在打印文本时我听不到女性的声音。关于将性别从男性更改为女性有什么建议吗? 顺便说一句,我在树莓派上,并且正在使用Linux操作系统。

提前谢谢

tts.py

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

6 个答案:

答案 0 :(得分:2)

我使用 pyttsx3 找到了一些可接受的女声(就我而言)。我使用的是 MacOS High Sierra、Python 3.7.3 和 Pyttsx3 2.90。我已在下面运行此代码以使用此 Samantha 语音 ID:

import pyttsx3
engine = pyttsx3.init()
engine.setProperty('voice', 'com.apple.speech.synthesis.voice.samantha')

我发现很多女性声音都在寻找性别属性('VoiceGenderFemale')。不过,大部分都很奇怪,上面这个是最能接受的。我发现它运行此代码:

import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
voiceFemales = filter(lambda v: v.gender == 'VoiceGenderFemale', voices)
for v in voiceFemales:
    engine.setProperty('voice', v.id)
    engine.say('Hello world from ' + v.name)
    engine.runAndWait()

答案 1 :(得分:1)

实际情况是,核心 pyttsx3 包中包含无女声。 但是如果您使用 linux/espeak,则有一个解决方案。您可以使用其中之一来模拟女声。

engine.setProperty('voice', 'english+f1')
engine.setProperty('voice', 'english+f2')
engine.setProperty('voice', 'english+f3')
engine.setProperty('voice', 'english+f4')
engine.setProperty('voice', 'english_rp+f3') #my preference
engine.setProperty('voice', 'english_rp+f4')

您也可以通过将 +f1 到 +f4 添加到其他基本语音中来进行播放。 有关更多信息,您可以在 github 中查看此问题:pyttsx female voice

答案 2 :(得分:0)

来自official pypi page for pyttsx3

voices = engine.getProperty('voices')       #getting details of current voice
#engine.setProperty('voice', voices[0].id)  #changing index, changes voices. o for male
engine.setProperty('voice', voices[1].id)   #changing index, changes voices. 1 for female

答案 3 :(得分:0)

Pyttsx提供更改选项:

engine.setProperty('voice', voices[1].id)

我知道它不起作用。然后我想在Python上运行:

for voice in voices:
  print("ID: %s" % voice.id)
  print("Name: %s" % voice.name)
  print("Age: %s" % voice.age)
  print("Gender: %s" % voice.gender)
  print("Languages Known: %s" % voice.languages)

当我看到输出时,没有女性声音。我在Windows上尝试了相同的库,一切都很好。因此,您可以通过更改ID来更改声音,但不能更改为女性声音,不能更改为Linux,也不使用标准软件包。也许可能有一种实现语音包的方法,但这可能很棘手。

我尝试了gTTS,但似乎不再工作了。我想Google会改变翻译包中的某些内容,并且gTTS崩溃(在6个月前有效,但现在不再可用)。我找到了解决方案,但我不知道这是否会让您满意:

  1. 编写一个使用SVOX pico2wave进行文本语音转换的bash脚本(这是我发现的唯一具有女性声音的库,我无法在Python中使用它,但在Bash中可以正常工作)。
  2. 使您的Python项目没有语音输入/输出部分,就像文本输入/输出一样。
  3. 制作另一个Bash脚本以语音转换为文本。
  4. 制作另一个使用3比2比1的Bash脚本。这个想法是:
    • 通过Bash取得声音,输出应发送到Python代码。
    • Python代码应管理数据并提供输出。
    • 输出应触发文本到语音Bash脚本。

Voila,您的声音是女性的。可以解决,但总比没有好。

答案 4 :(得分:0)

您可以通过编写以下 1 行来获得女声:

engine.setProperty('voice', voices[1].id)  # this is female voice

您可以通过编写以下代码行来打印所有声音:

voices = engine.getProperty('voices')
for v in voices:
    print(v)

示例输出:

<Voice id=com.apple.speech.synthesis.voice.Alex
          name=Alex
          languages=['en_US']
          gender=VoiceGenderMale
          age=35>
<Voice id=com.apple.speech.synthesis.voice.alice
          name=Alice
          languages=['it_IT']
          gender=VoiceGenderFemale
          age=35>
<Voice id=com.apple.speech.synthesis.voice.alva
          name=Alva
          languages=['sv_SE']
          gender=VoiceGenderFemale
          age=35>
<Voice id=com.apple.speech.synthesis.voice.amelie
          name=Amelie
          languages=['fr_CA']
          gender=VoiceGenderFemale
          age=35>
<Voice id=com.apple.speech.synthesis.voice.anna
          name=Anna....

答案 5 :(得分:-1)

如果您在下面的代码中运行,则会得到女性的声音。。聆听并享受!!

import pyttsx3
    
engine = pyttsx3.init()  # object creation
voices = engine.getProperty('voices')  # getting details of current voice
#engine.setProperty('voice', voices[0].id)  # changing index, changes voices. 0 for male
engine.setProperty('voice', voices[1].id)  # changing index, changes voices. 1 for female
    
engine.say("I will speak this text")
engine.runAndWait()

Opps等待运行此代码之前,您需要安装其他软件包,只需在Powershell或您的环境中复制并粘贴以下文本

pip install pyttsx3

通常Windows内置语音

print(voices[0].id) # this guy name is David

print(voices[1].id) # beautiful women name ZIRA(hahaha)