【python】文本转换为语音——pyttsx3模块的使用

文本转换为语音(pyttsx3模块)

pyttsx3模块

  • 文本转换为语音(pyttsx3模块)
  • 一、pyttsx3的概述
  • 二、简单应用
  • 三、一些实例
  • 四、官方文档节选

一、pyttsx3的概述

pyttsx3是Python中的文本到语音转换库。与其他库不同,它可以脱机工作,并且与Python 2和3兼容。

二、简单应用

  1. 导入pyttsx3模块后,调用speak函数就可以简单播报
import pyttsx3 # 导入pyttsx3模块
pyttsx3.speak("刘彤,你个大坏蛋")
  1. 如果我们想要修改语音,语速,音量就需要用到如下的方法
  • pyttsx3通过初始化来获取语音引擎,在调用init后会返回一个engine对象
import pyttsx3
engine = pyttsx3.init() #初始化语音引擎
  • 语速和音量
# 语速
rate = engine.getProperty('rate')
# 音量
volume = engine.getProperty('volume')

"""
以下是pyttsx3的官方文档

getProperty(名称:字符串)→对象
获取引擎属性的当前值。

参数:	名称 - 要查询的属性的名称。
退货:	此调用时属性的价值。
以下属性名称对所有驱动程序都有效。

rate
以每分钟单词为单位的整数语音速率。默认为每分钟200字。

voice
活动语音的字符串标识符。

voices
pyttsx3.voice.Voice描述符对象列表。

volume
浮动点体积在0.0到1.0(含)之间。默认为1.0。
"""
  • 设置语速、音量等参数
engine.setProperty('rate', 100)   #设置语速为100
engine.setProperty('volume',0.6)  #设置音量为0.6
"""
以下是pyttsx3的官方文档

setProperty(名称,值)→无
排队设置引擎属性的命令。新属性值会影响在此命令之后排队的所有话语。

参数:	
名称 - 要更改的属性的名称。
值 - 值设置为。
以下属性名称对所有驱动程序都有效
"""
  • 查看语音合成器
voices = engine.getProperty('voices') 
# 遍历
for voice in voices:
    print(voice) 
  • 运行结果的部分
"""




"""

合成器的主要参数
如下:

age 发音人的年龄,默认为None
id 关于Voice的字符串确认信息
languages 发音支持的语言列表,默认为一个空的列表
name 发音人名称,默认为None

注:默认的语音合成器有两个,两个语音合成器均可以合成英文音频,但只有第一个合成器能合成中文音频。如果需要其他的语音合成器需要自行下载和设置。

  • 设置语音合成器
voices = engine.getProperty('voices') 
engine.setProperty('voice',voices[0].id)   #设置第一个语音合成器
  • 语音播报
engine.say("刘彤,你个大坏蛋,呜呜呜,有其他小哥哥不理我呜呜呜")
engine.runAndWait()
engine.stop()

"""
关于官方文档中runAndWait()函数的用法

runAndWait() → 无
处理所有当前排队命令时的块。适当地调用引擎通知的回调。当此调用之前排队的所有命令从队列中清空时返回。
"""


"""
关于say()函数的用法

say(文本:unicode,名称:字符串)→无
排队命令说一句话。语音是根据队列中此命令之前设置的属性输出的。
参数:	
文本-文本说话。
名称-与话语关联的名称。包含在有关此话语的通知中。
"""

"""
关于stop()的用法
stop() → 无
停止当前话语并清除命令队列。
"""

三、一些实例

  1. 口语文本
import pyttsx3
engine = pyttsx3.init()
engine.say('我爱你.')
engine.say('I love you.')
engine.runAndWait()
  1. 将语音保存到文件
import pyttsx3
engine = pyttsx3.init()
engine.save_to_file(' I love you' , 'test.mp3')
engine.runAndWait()
  1. 倾听事件
import pyttsx3
def onStart(name):
   print 'starting', name
def onWord(name, location, length):
   print 'word', name, location, length
def onEnd(name, completed):
   print 'finishing', name, completed
engine = pyttsx3.init()
engine.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
  1. 打断话语
import pyttsx3
def onWord(name, location, length):
   print 'word', name, location, length
   if location > 10:
      engine.stop()
engine = pyttsx3.init()
engine.connect('started-word', onWord)
engine.say('i wish you happy')
engine.runAndWait()
  1. 改变声音
engine = pyttsx3.init()
voices = engine.getProperty('voices')
for voice in voices:
   engine.setProperty('voice', voice.id)
   engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()
  1. 更改音量
engine = pyttsx3.init()
volume = engine.getProperty('volume')
engine.setProperty('volume', volume-0.25)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()

四、官方文档节选

__init__(代理:pyttsx3.drivers.DriverProxy,*args,**kwargs)→无
构造函数。必须存储代理参考。

参数:	代理 - 由buildDriver()函数提供的代理实例。
destroy()
可选。pyttsx3.driver.DriverProxy在被销毁时调用,以便此委托可以清理任何合成器资源。如果不实现,代理将安全进行。

endLoop() → 无
运行的驱动程序事件循环立即结束。

getProperty(名称:字符串)→对象
Immediately gets the named property value. At least those properties listed in the pyttsx3.Engine.getProperty() documentation must be supported.

参数:	名称 - 要查询的属性的名称。
退货:	此调用时属性的价值。
say(文本:unicode,名称:字符串)→无
立即说出一句话。语音必须根据调用时应用的当前属性值输出。在返回此方法之前,它必须调用值为True的pyttsx3.driver.DriverProxy.setBusy(),以阻止命令队列的进一步处理,直到输出完成或中断。

此方法必须在输出开始时触发一个且只有一个开始话语通知,在话语中每个单词的开头触发一个开始单词通知,在输出完成时触发一个完成话语通知。

参数:	
文本-文本说话。
名称-与话语关联的名称。包含在有关此话语的通知中。
setProperty(名称:字符串,值:对象)→无
Immediately sets the named property value. At least those properties listed in the pyttsx3.Engine.setProperty() documentation must be supported. After setting the property, the driver must invoke pyttsx3.driver.DriverProxy.setBusy() with value False to pump the command queue.

参数:	
名称 - 要更改的属性的名称。
值 - 值设置为。
startLoop()
立即启动事件循环。该循环负责发送有关话语的通知,并使用赋予创建此对象的工厂函数的pyttsx3.driver.DriverProxy对象上的方法抽取命令队列。

stop()
立即停止当前话语输出。如果在持续输出期间调用,此方法必须触发完成话语通知。如果没有持续的输出,它必须不会触发通知。

停止输出并发送任何所需通知后,驱动程序必须调用值为False的pyttsx3.driver.DriverProxy.setBusy()来泵送命令队列。


你可能感兴趣的:(python,语音识别,开发语言)