python 利用pyttsx3文字转语音过程详解


Posted in Python onSeptember 25, 2019

这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

# -*- coding: utf-8 -*-
import pyttsx3
engine = pyttsx3.init()
with open("all.txt",'r',encoding='utf-8') as f:
  while 1:
    line = f.readline()
    print(line, end = '')
    engine.say(line)
    engine.runAndWait()
import pyttsx3
with open('all.txt','r',encoding='utf-8') as f:
  line = f.read()#文件不大,一次性读取
  engine = pyttsx3.init()
  #调整频率
  rate = engine.getProperty('rate')
  engine.setProperty('rate', rate-50)
  # 调整音量
  volume = engine.getProperty('volume')
  engine.setProperty('volume', volume+0.25)
  engine.say(line)
  engine.runAndWait()

安装

pip install pyttsx3

语音引擎工厂

类似于设计模式中的“工厂模式”,pyttsx3通过初始化来获取语音引擎。当我们第一次调用init操作的时候,会返回一个pyttsx3的engine对象,再次调用的时候,如果存在engine对象实例,就会使用现有的,否则再重新创建一个。

pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine

从方法声明上来看,第一个参数指定的是语音驱动的名称,这个在底层适合操作系统密切相关的。如下:

1.drivename:由pyttsx3.driver模块根据操作系统类型来调用,默认使用当前操作系统可以使用的最好的驱动

sapi5 - SAPI5 on Windows

nsss - NSSpeechSynthesizer on Mac OS X

espeak - eSpeak on every other platform

2.debug: 这第二个参数是指定要不要以调试状态输出,建议开发阶段设置为True

引擎接口

要想很好的运用一个库,不了解其API是不行的。下面来看看pyttsx3。engine.Engine的引擎API。

方法签名 参数列表 返回值 简单释义
connect(topic : string, cb : callable)  topic:要描述的事件名称;cb:回调函数  →   dict  在给定的topic上添加回调通知
disconnect(token : dict)  token:回调失联的返回标记  Void 结束连接
endLoop() None → None  简单来说就是结束事件循环
getProperty(name : string)  name有这些枚举值“rate, vioce,vioces,volumn  → object  获取当前引擎实例的属性值
setProperty(name : string)  name有这些枚举值“rate, vioce,vioces,volumn → object  设置当前引擎实例的属性值
say(text : unicode, name : string)  text:要进行朗读的文本数据; name: 关联发音人,一般用不到 → None 预设要朗读的文本数据,这也是“万事俱备,只欠东风”中的“万事俱备”
runAndWait() None → None  这个方法就是“东风”了。当事件队列中事件全部清空的时候返回
startLoop([useDriverLoop : bool])  useDriverLoop:是否启用驱动循环 → None  开启事件队列

元数据音调

在pyttsx3.voice.Voice中,处理合成器的发音。

age

发音人的年龄,默认为None

gender

以字符串为类型的发音人性别: male, female, or neutral.默认为None

id

关于Voice的字符串确认信息. 通过 pyttsx3.engine.Engine.setPropertyValue()来设置活动发音签名. 这个属性总是被定义。

languages

发音支持的语言列表,如果没有,则为一个空的列表。

name

发音人名称,默认为None.

更多测试

朗读文本

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()

事件监听

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.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()

打断发音

import pyttsx3
def onWord(name, location, length):
 print('word', name, location, length)
 if location > 10:
  engine.stop()
engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()

更换发音人声音

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()

语速控制

engine = pyttsx3.init()
rate = engine.getProperty('rate')
engine.setProperty('rate', rate+50)
engine.say('The quick brown fox jumped over the lazy dog.')
engine.runAndWait()

音量控制

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()

执行一个事件驱动循环

engine = pyttsx3.init()
def onStart(name):
 print('starting', name)

def onWord(name, location, length):
 print('word', name, location, length)

def onEnd(name, completed):
 print('finishing', name, completed)
 if name == 'fox':
  engine.say('What a lazy dog!', 'dog')
 elif name == 'dog':
  engine.endLoop()

engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.', 'fox')
engine.startLoop()

使用一个外部的驱动循环

engine = pyttsx3.init()
engine.say('The quick brown fox jumped over the lazy dog.', 'fox')
engine.startLoop(False)
# engine.iterate() must be called inside externalLoop()
externalLoop()
engine.endLoop()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的装饰器模式与面向切面编程详解
Jun 21 Python
Python绘制正余弦函数图像的方法
Aug 28 Python
Python 加密与解密小结
Dec 06 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
pycharm 更改创建文件默认路径的操作
Feb 15 Python
python实现PCA降维的示例详解
Feb 24 Python
学习python需要有编程基础吗
Jun 02 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
Python列表元素删除和remove()方法详解
Jan 04 Python
Python中使用Lambda函数的5种用法
Apr 01 Python
python retrying模块的使用方法详解
Sep 25 #Python
Python 实现一个手机号码获取妹子名字的功能
Sep 25 #Python
python 魔法函数实例及解析
Sep 25 #Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 #Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 #Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 #Python
python异步编程 使用yield from过程解析
Sep 25 #Python
You might like
虫族 Zerg 魔法科技
2020/03/14 星际争霸
用PHP实现多服务器共享SESSION数据的方法
2007/03/16 PHP
PHP生成HTML静态页面实例代码
2008/08/31 PHP
PHP中的integer类型使用分析
2010/07/27 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
IE与firefox之jquery用法区别
2008/10/03 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
jQuery 使用手册(五)
2009/09/23 Javascript
7款吸引人眼球的jQuery/CSS3特效实例分享
2013/04/25 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
win10下Python3.6安装、配置以及pip安装包教程
2017/10/01 Python
python 拼接文件路径的方法
2018/10/23 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
汽车运用工程毕业生自荐信
2013/10/29 职场文书
实习求职信
2013/12/01 职场文书
八年级历史教学反思
2014/01/10 职场文书
共产党员公开承诺书
2014/03/25 职场文书
青春无悔演讲稿
2014/05/08 职场文书
关于清明节的演讲稿
2014/09/13 职场文书
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python