赞
踩
pyttsx3是一款非常简单的文本到语音的转换库,可以脱机工作,支持多种TTS引擎(sapi5、nsss、espeak),通过这个库可以非常方便的将文字转换成语音;
安装pyttsx3:
pip install pyttsx3
首先看下pyttsx3最简单的应用:
- import pyttsx3
-
- say = pyttsx3.init() # 创建pyttsx对象,并初始化对象
-
- msg = '''今天的天气真好,出去打球吧''' # 需要合成的文字
-
- say.say(msg) # 合成并播放语音
- say.runAndWait() # 等待语音播放完
是不是非常的简单,但是现在所有的参数都是默认的,或许我们希望他的语速快一点、音量响一点,或者是女声,那么这就需要我们对参数进行配置,接下来我们一个一个来看:
接下来我们通过实例一步一步讲解其他的属性和方法:
- import pyttsx3
-
- say = pyttsx3.init()
-
- rate = say.getProperty('rate') # 获取当前语速属性的值
- say.setProperty('rate', rate-20) # 设置语速属性为当前语速减20
-
- msg = '''今天天气不错,出去打篮球吧!'''
-
- say.say(msg)
- say.runAndWait()
现在新出现了两个方法:getProperty()和setProperty(),从字面上看,这两个一个是获取属性值,一个是设置属性值,我们来看下他的函数原型是什么:- import pyttsx3
-
- say = pyttsx3.init()
-
- volume = say.getProperty('volume') # 最开始以为这个是用来获取当前属性值的,但是发现将属性值修改了再获取,并没有发生变化
- print('默认的音量是:',volume)
-
- rate = say.getProperty('rate')
- print('默认的语速是:',rate)
-
- voice = say.getProperty('voice')
- print('默认使用的合成器ID:',voice)
-
- voices = say.getProperty('voices')
- print('合成器列表:',voices)
-
- for i in voices:
- print(i)
-
- # 输出结果:
- # 当前的音量是: 1.0
- # 当前的语速是: 200
- # 当前使用的合成器ID: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0
- # 合成器列表: [<pyttsx3.voice.Voice object at 0x00000269C06D8EB8>, <pyttsx3.voice.Voice object at 0x00000269C01C4EB8>]
- # <Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_ZH-CN_HUIHUI_11.0
- # name=Microsoft Huihui Desktop - Chinese (Simplified)
- # languages=[]
- # gender=None
- # age=None>
- # <Voice id=HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\TTS_MS_EN-US_ZIRA_11.0
- # name=Microsoft Zira Desktop - English (United States)
- # languages=[]
- # gender=None
- # age=None>

通过上面的程序,大概可以猜出setProperty()的用法:- import pyttsx3
-
- say = pyttsx3.init()
-
- voices = say.getProperty('voices')
- say.setProperty('voice',voices[1].id) # 注意,voice这个属性接收的是id
-
- say.say('How are you!')
- say.runAndWait()
之前在播放中文的时候,第一种可以正常播放,第二种就直接罢工了,后面合成英文的句子,两个都可以播放,并且可以听到很明显的差别,这个有兴趣可以好好研究下;(好像看见其他文章有说可以下载合成器什么的,后面就找不到了,后面再补充)- import pyttsx3
-
- def Start(name):
- print('starting', name)
- def onWord(name, location, length):
- print('word', name, location, length)
- if location > 20:
- engine.stop()
- def onEnd(name, completed):
- print('finishing', name, completed)
- def onError(name, exception):
- print('error:', name, exception)
-
- engine = pyttsx3.init()
-
- engine.connect('started-word', onWord)
- engine.connect('started-utterance', Start)
- engine.connect('finished-utterance', onEnd)
- engine.connect('error', onError)
-
- engine.say('The quick brown fox jumped over the lazy dog.','test')
- engine.runAndWait()

上面这段代码是官方给出的,大致的用法是:- import pyttsx3
- import time
-
- def onWord(name, location, length):
- print('word', name, location, length)
- if time.time() > time.mktime((2020,1,5,0,30,0,0,0,0)): # 在规定的时间停止
- engine.stop() # stop()方法会停止播放并清空队列
-
- engine = pyttsx3.init()
-
- engine.connect('started-word', onWord)
-
- story = '''兔子的胆小是出了名的,经常受到的惊吓总是像石头一样压在它们的心上。
- 有一次,众多兔子聚集在一起,为自己的胆小无能而难过,悲叹自己的生活中充满了危险和恐惧。
- 它们越谈越伤心,就好像已经有许多不幸发生在自己身上,而这也就是它们之所以成为兔子的原因。到了这种地步,负面的想像便无止境地涌现出来。它们怨叹自己天生不幸,既没有力气和翅膀,也没有牙齿,日子只能在东怕西怕中度过,就连想要抛弃一切大睡一觉,也有什么都听得见的长耳朵的阻扰,赤红的眼睛也就变得更加鲜红了。
- 它们觉得自己的这种生活是毫无意义的,这又成了它们自我厌恶的根源。它们都觉得,与其一生心惊胆战,还不如一死了之好。
- 于是,它们一致决定从山崖上跳下去了结自己的生命,结束一切烦恼。就这样决定了,于是它们一齐奔向山崖,想要投河自尽。这时,一些青蛙正围在湖边蹲着,听到急促的脚步声,如临大敌,立刻跳到深水里逃命去了。
- 这是兔子每次到池塘边都会看到的情景,但是今天,有一只兔子突然明白了什么,它大声地说:“快停下来,我们不必吓得去寻死寻活了,因为我们现在可以看见,还有比我们更胆小的动物呢!”
- 这么一说,兔子们的心情奇妙地豁然开朗起来了,好像有一股勇气喷涌而出,于是它们欢天喜地回家去了。
- 【大道理】不要为我们现在的遭遇就埋怨命运的不公,实际上,世界上还有很多比我们更不幸的人,想想那些更不幸的人仍旧坚强地活着,我们又为什么不能呢?'''
-
- engine.say(story)
- engine.runAndWait()

pyttsx3这个库还没有完全研究完,比如:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。