起因
个人更喜欢男性的语音,但默认的中文语音包中只存在女性的语音包。
查看语音包列表
import pyttsx3
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
print(voice)
可以看到,在python输出语音包列表中,中文的语音包只有HuiHui。但在设置中我们可以看到还有Kangkang,这个语音包是男性声音的,我们的目的就是使用这个语音包。
新增语音包信息
参考文章:https://www.likecs.com/show-204841565.html
根据这篇文章的操作后,重新跑代码,最终依然还是无法找到Kangkang,仔细查看之后,发现是注册表路径与pyttsx3所扫描的路径不一致。
打开注册表页面
win+R 打开运行界面,输入regedit
点击确定,打开注册列表界面。
根据pyttsx3输出的扫描路径,找到对应的路径的注册表信息,我本地的扫描路径是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\
在此目录下,能看到的语音包有:
因为Kangkang是中文包,所以选择同样为中文包的HuiHui,进行导出。
对导出的文件进行编辑,将所有的“HuiHui”更换为“Kangkang”,并将gender设置为Male
保存文件后,双击文件安装注册表信息。但在注册表中,Kangkang所指向的voicepath依然还是huihui,所以要将其更换为Kangkang。
选中voicepath,右击修改,将huihui更改为Kangkang即可。
测试
使用pyttsx3,导出所有的语音包列表即可发现,Kangkang已经可以被检测到了:
Kangkang在整个数组中排第五,使用数组调用kangkang的id即可:
import pyttsx3
engine = pyttsx3.init()
engine.setProperty('rate', 200) # 设置语速
engine.setProperty('volume', 1) # 设置音量,定义区间[0,1]
voices = engine.getProperty('voices')
for voice in voices:
print(voice)
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[4].id) # 设置第五个语音合成器
engine.say("这里是康康")
engine.runAndWait()
engine.stop()