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之使用Python操作数据库(1)
Nov 25 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Django实现组合搜索的方法示例
Jan 23 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
解决安装tensorflow遇到无法卸载numpy 1.8.0rc1的问题
Jun 13 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
详解Python做一个名片管理系统
Mar 14 Python
用Python识别人脸,人种等各种信息
Jul 15 Python
Pycharm配置PyQt5环境的教程
Apr 02 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 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
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
php 进度条实现代码
2009/03/10 PHP
利用PHP实现短域名互转
2013/07/05 PHP
CI框架验证码CAPTCHA辅助函数用法实例
2014/11/05 PHP
php中in_array函数用法分析
2014/11/15 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
利用window.name实现windowStorage代码分享
2014/01/02 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
微信小程序分页加载的实例代码
2017/07/11 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
python装饰器decorator介绍
2014/11/21 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
python脚本开机自启的实现方法
2019/06/28 Python
python 杀死自身进程的实现方法
2019/07/01 Python
python如何更新包
2020/06/11 Python
详解基于python的图像Gabor变换及特征提取
2020/10/26 Python
公司承诺书怎么写
2014/05/24 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
python中的None与NULL用法说明
2021/05/25 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
Java实现简单小画板
2022/06/10 Java/Android