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中用memcached来减少数据库查询次数的教程
Apr 07 Python
使用python实现rsa算法代码
Feb 17 Python
浅析Python 中整型对象存储的位置
May 16 Python
Django基础之Model操作步骤(介绍)
May 27 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python根据url地址下载小文件的实例
Dec 18 Python
python linecache 处理固定格式文本数据的方法
Jan 08 Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 Python
Python如何调用JS文件中的函数
Aug 16 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
python raise的基本使用
Sep 10 Python
python实现三次密码验证的示例
Apr 29 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
改写ThinkPHP的U方法使其路由下分页正常
2014/07/02 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
Safari5中alert的无限循环BUG
2011/04/07 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
根据表格中的某一列进行排序的javascript代码
2013/11/29 Javascript
javascipt:filter过滤介绍及使用
2014/09/10 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
通过python爬虫赚钱的方法
2019/01/29 Python
python 将有序数组转换为二叉树的方法
2019/03/26 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
python中Django文件上传方法详解
2020/08/05 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
python实现定时发送邮件
2020/12/23 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
关于HTML5+ API plusready的兼容问题
2020/11/20 HTML / CSS
英国景点门票网站:attractiontix
2019/08/27 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
C语言笔试集
2012/07/24 面试题
环境科学专业个人求职信
2013/09/26 职场文书
寄语是什么意思
2014/04/10 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
会计实训报告范文
2014/11/04 职场文书
2014年社区工作总结
2014/11/18 职场文书
2015年度招聘工作总结
2015/05/28 职场文书
手残删除python之后的补救方法
2021/06/26 Python