1.安装
pip install pyttsx3
# 若未安装pywin32, 需要安装此库的
pip install pywin32
2.官方文档
官方网址https://pyttsx3.readthedocs.io/en/latest/engine.html
3.使用
简单使用
import pyttsx3
# 初始化, 必须要有奥
engine = pyttsx3.init()
engine.say('Sally sells seashells by the seashore.')
engine.say('The quick brown fox jumped over the lazy dog.')
# 注意,没有本句话是没有声音的
engine.runAndWait()
播放中文语音,python3下直接写就好了,不需要设置语言blabla的
就不要在意合成语音的僵硬问题了。。。
import pyttsx3
# 初始化, 必须要有奥
engine = pyttsx3.init()
engine.say('语音合成开始')
engine.say('我会说中文了,开森,开森')
# 注意,没有本句话是没有声音的
engine.runAndWait()
我在这项目要用的,如果要多次调用say()函数,并不是一次调用就结束了。
每次调用都有加上engine.runAndWait()就可以了
import pyttsx3
# 初始化, 必须要有奥
engine = pyttsx3.init()
engine.say('语音合成开始')
engine.say('我会说中文了,开森,开森')
# 注意,没有本句话是没有声音的
engine.runAndWait()
engine.say('我能说第二句话了')
engine.runAndWait()
来看一下复杂一点的, 通过条件语句来确定播报语音
import pyttsx3
engine = pyttsx3.init()
def VOICE_TEXT(names):
unknown_name = []
known_name = []
for name in names:
if name == 'Unknown':
unknown_name.append(name)
else:
known_name.append(name)
# 记录两类人数量
num_known = len(known_name)
num_unknown = len(unknown_name)
if len(names) == 0:
return
# 5s 播报一次
elif num_unknown == 0:
text = '欢迎'
for index in range(num_known):
if index + 1 == num_known and index != 0:
text += '和{}'.format(known_name[index])
else:
text += known_name[index]
engine.say(text)
engine.runAndWait()
# 3s 播报一次
elif num_known == 0:
text = '警告,警告,有陌生人未识别,有陌生人未识别'
engine.say(text)
engine.runAndWait()
# 7s 播报一次
else:
text = '欢迎'
for index in range(num_known):
if index + 1 == num_known and index != 0:
text += '和{}'.format(known_name[index])
else:
text += known_name[index]
engine.say(text)
engine.say('请注意, 您旁边有未识别人员,您将不允许进入,请询问值班人员,谢谢合作')
engine.runAndWait()
if __name__ == '__main__':
names = ['醉陌', '醉陌']
VOICE_TEXT(names)
names_ = ['Unknown', '醉陌']
VOICE_TEXT(names_)
names__ = ['Unknown']
VOICE_TEXT(names__)
最终实现, 程序中定时调用某一个函数,而在此函数中调用语音播报函数,于是添加了几个变量来维护函数播报与否
import pyttsx3
KUNOWN = 0
UNKNOWN = 0
UNKNOWN_KNOWN = 0
engine = pyttsx3.init()
engine.setProperty('voice', 'zh')
def VOICE_TEXT(names):
unknown_name = []
known_name = []
for name in names:
if name == 'Unknown':
unknown_name.append(name)
else:
known_name.append(name)
# 记录两类人数量
num_known = len(known_name)
num_unknown = len(unknown_name)
if len(names) == 0:
return
# 5s 播报一次
elif num_unknown == 0:
global KUNOWN
KUNOWN += 1
print('KUNOWN:', KUNOWN)
if KUNOWN == 15:
KUNOWN = 1
text = '欢迎'
for index in range(num_known):
if index + 1 == num_known and index != 0:
text += '和{}'.format(known_name[index])
else:
text += known_name[index]
engine.say(text)
engine.runAndWait()
# 3s 播报一次
elif num_known == 0:
global UNKNOWN
UNKNOWN += 1
print('UNKNOWN', UNKNOWN)
if UNKNOWN == 10 :
UNKNOWN = 1
text = '警告,警告,有陌生人未识别,有陌生人未识别'
engine.say(text)
engine.runAndWait()
# 7s 播报一次
else:
global UNKNOWN_KNOWN
UNKNOWN_KNOWN += 1
print('UNKUOWN_KNOWN', UNKNOWN_KNOWN)
if UNKNOWN_KNOWN == 25:
UNKNOWN_KNOWN = 2
text = '欢迎'
for index in range(num_known):
if index + 1 == num_known and index != 0:
text += '和{}'.format(known_name[index])
else:
text += known_name[index]
engine.say(text)
engine.say('请注意, 您旁边有未识别人员,您将不允许进入,请询问值班人员,谢谢合作')
engine.runAndWait()
if __name__ == '__main__':
names = ['醉陌', '醉陌']
VOICE_TEXT(names)
---------------------