点击上方蓝字关注我们
今天小编给大家介绍一个有趣的事情,让代码开口说话,简单点说就是python利用pyttsx3实现文字转语音。感觉还是蛮有趣的,并且支持中文哦。
首先我们先安装
pyttsx3
pip install pyttsx3
如果是windows操作系统,并且未安装pywin32, 需要安装pywin32
pip install pywin32
我们首先让代码说句Hello World,然后再说句中文
import pyttsx3
# 模块初始化
engine = pyttsx3.init()
print('准备开始语音播报...')
engine.say('Hello World')
engine.say('孙肖宁')
# 等待语音播报完毕, 不写这个是不可以的哦
engine.runAndWait()是不是很简单呢
我们还可以进行语速控制、音量控制、更换发音人声音
import pyttsx3
# 模块初始化
engine = pyttsx3.init()
print('准备开始语音播报...')
# 语速控制,默认值为200
rate = engine.getProperty('rate')
engine.setProperty('rate', rate - 50)
# 音量控制,范围为0.0-1.0
volume = engine.getProperty('volume')
engine.setProperty('volume', 0.6)
# 添加朗读文本
engine.say('窗前明月光,疑是地上霜。')
# 等待语音播报完毕
engine.runAndWait()我们再来说下更换发音人的声音,目前中文仅支持3种
import pyttsx3
# 模块初始化
engine = pyttsx3.init()
volume = engine.getProperty('volume')
# 普通话发音
voices = engine.setProperty(
'voice', "com.apple.speech.synthesis.voice.ting-ting.premium")
# 标准的粤语发音
# voices = engine.setProperty(
# 'voice', "com.apple.speech.synthesis.voice.sin-ji")
# 台湾女生普通话发音
# voices = engine.setProperty(
# 'voice', "com.apple.speech.synthesis.voice.mei-jia")
print('准备开始语音播报...')
# 输入语音播报词语
engine.setProperty('volume', 3)
engine.say("窗前明月光,疑是地上霜。举头望明月,低头思故乡。")
engine.runAndWait()
engine.stop()另外你可以尝试查看内置的其他声音,遍历下面的voices即可
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[0].id)普通话:
com.apple.speech.synthesis.voice.ting-ting.premium
粤语 :
com.apple.speech.synthesis.voice.ting-ting.premium
台湾女生普通话:
com.apple.speech.synthesis.voice.mei-jia
详解
语音引擎工厂类似于设计模式中的“工厂模式”,pyttsx3通过初始化来获取语音引擎。当我们第一次调用init操作的时候,会返回一个pyttsx3的engine对象,再次调用的时候,如果存在engine对象实例,就会使用现有的,否则再重新创建一个。
pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine
从方法声明上来看,第一个参数指定的是语音驱动的名称,这个在底层适合操作系统密切相关的。如下:
drivename
:由pyttsx3.driver模块根据操作系统类型来调用,默认使用当前操作系统可以使用的最好的驱动。sapi5 - SAPI5 on Windows
nsss - NSSpeechSynthesizer on Mac OS X
espeak - eSpeak on every other platform
debug:
要不要以调试状态输出,开发阶段可以设置为True。
函数说明
connect()在给定的topic上添加回调通知
dict
topic(string):要描述的事件名称;
cb(callable):回调函数。
参数:
返回值:
disconnect()结束连接
token(dict):回调失联的返回标记
参数:
返回值:
Void
endLoop()简单来说就是结束事件循环
getProperty()获取当前引擎实例的属性值
name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
name(string):voice: 语音的字符串标识符。
name(string):voices: pyttsx3.voice.Voice描述符对象列表。
name(string):volume:音量的大小。
参数:
返回值:
Object
setProperty()获取当前引擎实例的属性值
name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
name(string):voice: 语音的字符串标识符。
name(string):volume:音量的大小。
value(int):rate: 设置每分钟读的字数。
value:voice:设置发音,后文中会再讲到。
valu(float):volume:设置音量大小,0.0-1.0之间;默认1.0。
参数:
返回值:
Object
say()预设要朗读的文本数据
text(unicode):要进行朗读的文本数据。
name(strin):关联发音人(一般用不到)
参数:
runAndWait()当事件队列中事件全部清空的时候返回
startLoop()开启事件队列
[useDriverLoop(bool)]:是否启用驱动循环。
参数:
stop()停止当前讲话并清除命令队列。
- 喜欢就点个在看再走吧