Python语音合成探究(一、男声和女声的选择)

       python语音合成的代码网上很多,大多也能正常使用。但也存在简单到只能发出声音、不能选择男声女声等问题,并不具备多少实用价值。下面就是我在网上并找到做了少量修改的一段语音合成的代码:

#coding=utf-8
import pyttsx3
engine = pyttsx3.init() # 必不可少


# 打开文本文件
with open('诗经1.txt') as file:
    text = file.read()
# 选择声音类型
# 男性(voices[0].id)、女性(voices[1].id)
# sex = int(input('请选择声音种类,男声选0,女声选1'))
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id) #设置当前声音为“男性”,当前声音可读中文也可读英文
# engine.setProperty('voice', voices[1].id) #设置当前声音为“女性”,当前声音不可读中文

# 调整语速
# rate = int(input('请选择语速,0-500,正常约200'))
rate = engine.getProperty('rate') #获取当前音频语速,范围一般为0-200,默认值为200
engine.setProperty('rate', 200)  #改变语速

# 调整声量,范围在0~1之间
volume = engine.getProperty('volume')  #设置音量
engine.setProperty('volume',0.8)  #范围一般为0.0~1.0 默认值为1.0
# print("下面开始为您朗颂,请欣赏......")
engine.say("下面开始为您朗颂,请欣赏......")
engine.say(text) # 朗读
engine.runAndWait() #运行并且等到播放完毕,没有本语句是没有声音的

engine.runAndWait()
engine.stop()

       最开始我也以为男声是(voices[0].id)、女声 是(voices[1].id),还加了个选择男声女声的代码,结果发现,不管如何选择,都只有女声。

        如何解决,应从以下几个方面来解决:

第一个问题:电脑系统有没有安装男声语音引擎?

        Win10系统中,在右下角“时间”任务栏上右击,选择“调整时间”,在弹出的“设置”页面中会有“语音"选项。点击“选择语音”中的下拉箭头,可以看到目前系统中安装的语音引擎。

Python语音合成探究(一、男声和女声的选择)_第1张图片

        在本人的电脑系统中,已安装好几个语音引擎,经“预听语音”测试,至少有两个男声引擎(见图示),这说明本人的电脑,是具备男声语音合成条件的。

第二个问题:在python模块pyttsx3中,是不是(voices[0].id)代表男声、(voices[1].id)代表女声 ,或是相反?这个问题也很简单。

        在选择男声女声之前 ,我们可以增加几行代码,用来查询下系统的语音引擎。

    # 获取当前语音声音的详细信息
    voices = engine.getProperty('voices')
    for voice in voices: # 打印已安装语音信息
        print(f'您的电脑系统已安装的语音声音有:{voice}\n')

       运行结果显示本人电脑系统有5个语音引擎,从voices[0].id逐一试到voices[4].id,结果仍只有女声。

       说明这个想法,图样图森破。方括号中的索引值并不一定只有0和1,要看你的系统中安装的语音引擎数量。

第三个问题:安装的语音引擎,究竟在哪能找到?

       系统明明安装有男声引擎,为什么在程序中却不能调出男声?

       网上搜索相关问题的解决方法,各种说法都有,主要是修改注册表,但并没说清为什么要改注册表,并且也并不一定能解决问题。

       从获取的语音信息来看,确实与注册表有关:

       电脑系统已安装的语音引擎的路径也能看出来:

       那就进注册表去看看。按Win+R键运行CMD进入命令窗口,运行regedit,打开注册表:

Python语音合成探究(一、男声和女声的选择)_第2张图片

       打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\项,可以看到系统安装的语音引擎,Kangkang在其中,加M的应是男声,但实际上使用时还是女声,HuiHuiM也是一样。可能当初安装语音引擎时根本就没安装这些引擎,只是当时照着网文修改了注册表,导致注册表中存在一些虚假的引擎信息。Danny的语音引擎干脆就没有显示其中。

Python语音合成探究(一、男声和女声的选择)_第3张图片 

       既然系统已安装Danny语音引擎,注册表中为什么看不见呢?

       注意到Speech项下还有个Speech_OneCore项,不妨打开看看,同样也进入Voices\Tokens:

Python语音合成探究(一、男声和女声的选择)_第4张图片

      你是不是有了新的发现?没错,系统安装的语音引擎都在这里(和语音设置里显示的引擎一致),现在的关键就是如何把Speech_OneCore项下的子项转移到Speech项下去。以Danny为例,选中MSTTS_V110_zhHK_DannyM子项,右击导出并保存为Danny.reg,右击编辑,将注册表中两个地方的Speech_OneCore修改为Speech(为的是修改路径),保存后双击运行文件,新的注册表值就导入电脑注册表了。

Python语音合成探究(一、男声和女声的选择)_第5张图片

 再运行下代码,电脑安装语音引擎就能看到Danny引擎了。

Python语音合成探究(一、男声和女声的选择)_第6张图片

再试着修改 voices[0].id中的索引值,其中必有一个是广东话男声(注意Hong Kong S.A.R)。

KangKang 语音引擎的解决应该也能如法炮制。如原来就有相应语音引擎信息但不能用,不妨先删除再导入。

语音合成中的男声女声问题,应不再是个问题。大家可照些方法试试。

你可能感兴趣的:(菜鸟学python,语音识别,python)