我在《Python语音合成探究(一、男声和女声的选择)》文章中介绍了声音的选择,但有些朋友还是不能成功。我想,Win10中,在“调整时间”--“设置”--“语音”中,能预听各类语音的实际效果(但并一定保证你在python中正常使用,具体原因及解决方法参看《Python语音合成探究(一、男声和女声的选择)》文章),我何不写一段代码,也实现这样的功能呢?
import re
import sys, os
import pyttsx3
import win32com.client as wincl
import chardet
from pathlib import Path
def audition():
# 创建对象
engine = pyttsx3.init()
# 获取当前语音速率
rate = engine.getProperty('rate')
# print(f'语音速率:{rate}')
# 设置新的语音速率
engine.setProperty('rate', 150)
# 获取当前语音音量
volume = engine.getProperty('volume')
# print(f'语音音量:{volume}')
# 设置新的语音音量,音量最小为 0,最大为 1
engine.setProperty('volume', 1.0)
# 获取当前语音声音的详细信息,并试听语音
voices = engine.getProperty('voices')
# 從語音信息是提取機器人姓名並試音
v = 0 # 语音索引号
for voice in voices:
# print(f'语音声音详细信息:{voice}')
# print(type(voice))
# str1 = str(voice)[82:100]
str1 = str(voice)[100:140].lstrip() # 將多行語音信息提取部分並去掉左空格
# print(v, '号', str1)
# print(type(str1))
pattern = r" (.*?) " # 匹配規則:匹配兩者之间的内容
str2 = re.search(pattern, str1).group(1)
str3 = str(voice)[50:100].lstrip()
if 'CN' in str3:
str3 = '普通话'
str4 = '我会说'
if 'HK' in str3:
str3 = '粤语'
str4 = '我会说'
if 'TW' in str3:
str3 = '国语'
str4 = '我会说'
if 'EN' in str3:
str3 = 'English'
str4 = 'I am the ',v,'voice robot, and my name is ',str2,'I can speak'
print(v, '号', str2,str3)
engine.setProperty('voice', voices[v].id)
engine.say("大家好,我是%d号语音机器人%s,%s%s" %(v,str2,str4,str3))
engine.runAndWait()
v = v + 1
audition()
实现预听倒不难,难的是提取每种语音模型的名称及语音类别,经过摸索,好歹实现了功能。如果你的系统语音种类不多,可以在Win10“调整时间”--“设置”--“语音”安装,并按《Python语音合成探究(一、男声和女声的选择)》文章解决注册表问题,也许,你的系统就会和我的一样,有近十种语音模型供python选择了。这是我的电脑运行结果:
语音合成:
******************
1、试听语音类型
2、选择语音类型
3、选择朗读文本文件
4、保存文本声音文件
5、退出
******************
请选择对应编号:>? 1
0 号 Huihui 普通话
1 号 Yaoyao 普通话
2 号 Danny 粤语
3 号 Yating 国语
4 号 Zhiwei 国语
5 号 David English
6 号 Zira English
7 号 Kangkang 普通话
8 号 Tracy 粤语
9 号 Hanhan 国语
运行时还有相应的声音介绍相应的语音模型,录像见视频语音模型试听-只有在这里能试听的语音模型才能被python选用。
祝大家都能成功。