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深入学习之闭包
Aug 31 Python
Pycharm学习教程(1) 定制外观
May 02 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
Feb 06 Python
tensorflow多维张量计算实例
Feb 11 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
通过Python扫描代码关键字并进行预警的实现方法
May 24 Python
python爬虫用scrapy获取影片的实例分析
Nov 23 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
Python基础之进程详解
May 21 Python
python 中的jieba分词库
Nov 23 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
php实现递归抓取网页类实例
2015/04/03 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
解析预加载显示图片艺术
2016/12/05 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
elementUI Tree 树形控件的官方使用文档
2019/04/25 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
python实现无证书加密解密实例
2014/10/27 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python 中的 else详解
2016/04/23 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Dower & Hall官网:英国小众轻奢珠宝品牌
2019/01/31 全球购物
医学生实习自荐信
2013/10/01 职场文书
函授本科毕业自我鉴定
2013/10/09 职场文书
集团公司人力资源部岗位职责
2014/01/03 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
社会稳定风险评估方案
2014/06/02 职场文书
机关保密承诺书
2014/06/03 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
2016年师德先进个人事迹材料
2016/02/29 职场文书
七年级作文之下雨天
2019/12/23 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
Python使用MapReduce进行简单的销售统计
2022/04/22 Python