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 爬虫的工具列表大全
Jan 31 Python
python机器学习之KNN分类算法
Aug 29 Python
win10 64bit下python NLTK安装教程
Sep 19 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
Python实现网站表单提交和模板
Jan 15 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python合并多张图片成PDF
Jun 09 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
linux命令之调试工具strace的深入分析
2013/06/03 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
常常会用到的截取字符串substr()、substring()、slice()方法详解
2015/12/16 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Vue创建头部组件示例代码详解
2018/10/23 Javascript
微信小程序实现列表页的点赞和取消点赞功能
2018/11/02 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python 实现两个npy档案合并
2020/07/01 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
Python 里最强的地图绘制神器
2021/03/01 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
Priority Pass机场贵宾室会籍计划:全球超过1200间机场贵宾室
2018/08/26 全球购物
校园十佳歌手策划书
2014/01/22 职场文书
小学教师国培感言
2014/02/08 职场文书
保护野生动物倡议书
2014/05/16 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技