操作系统:Windows 10_x64
python版本:Python 3.9.2_x64
pyttsx3版本: 2.90
 
pyttsx3是一个tts引擎包装器,可对接SAPI5、NSSS(NSSpeechSynthesizer)、espeak等引擎,实现统一的tts接口。

pyttsx3的地址:https://pypi.org/project/pyttsx3/

帮助文档地址:https://pyttsx3.readthedocs.org/

安装pyttsx3依赖包:

pip install pyttsx3

接口介绍

1、init接口

使用的具体引擎可以在init里面指定:

pyttsx3.init([driverName : string, debug : bool]) → pyttsx3.Engine
 
入参:
driverName : 可选,用于指定tts引擎,若未指定,则使用系统默认引擎。
  • sapi5 - windows环境
  • nsss - Mac OS X环境
  • espeak - 非windows和Mac OS X 的其它系统
debug : 可选,用于指定是否开启调试功能,若未指定,则不开启。

2、engine接口

使用init接口初始完毕,会返回engine对象。
engine对象的方法如下:

  • connect
注册回调函数用于订阅事件。
入参及出参
connect(topic : string, cb : callable) → dict
topic :订阅事件的名称,有效的名称
cb : 回调函数
返回token信息,可用于后续取消订阅。
 
可用事件如下:
started-utterance
引擎开始说话时触发,回调函数定义如下:
onStartUtterance(name : string) -> None
started-word
引擎说词语时触发,回调函数定义如下:
onStartWord(name : string, location : integer, length : integer) -> None
finished-utterance
引擎说话结束时触发,回调函数定义如下:
onFinishUtterance(name : string, completed : bool) -> None
error
引擎遇到错误时触发,回调函数定义如下:
onError(name : string, exception : Exception) -> None 
  • disconnect
反注册回调函数。
disconnect(token : dict)
token是connect函数返回的数据。 
  • endLoop
结束正在运行的事件循环。 
  • getProperty
获取tts的属性,比如语速、嗓音、音量等。
getProperty(name : string) -> object
参数:
name - 属性名称
object - 属性对象
属性列表:
rate - 语速
voice - 嗓音
voices - 嗓音集,列出 pyttsx3.voice.Voice 里面定义的所有嗓音
volume - 音量 
  • isBusy
判断当前引擎是否在执行文本转语音。
isBusy() -> bool
返回值:
True - 正在执行文本转语音
False - 未执行
  • iterate
当使用外部事件循环时,该方法需要被调用。
 
  • runAndWait
runAndWait() -> None
执行缓存的命令并等待完成。
  • save_to_file
执行语音转文本操作,并生成音频文件。
save_to_file(text : unicode, filename : string, name : string)
参数:
text - 要执行转语音的文本
filename - 文件名称
name - 可选,注册需要通知的关键字
示例:
engine.save_to_file('Hello World' , 'test.mp3')
 
  • say
执行语音转文本操作,并播放文本内容。
say(text : unicode, name : string) -> None
参数:
text - 要执行转语音的文本
name - 可选,注册需要通知的关键字
示例:
engine.say('I will speak this text!', 'speak')
 
  • setProperty
设置tts的属性,比如语速、嗓音、音量等。
setProperty(name, value) -> None
参数:
name - 属性名称
value - 属性值
属性列表:
rate - 语速,设置每分钟说几个字
voice - 嗓音,可以设置不同嗓音的说话人
volume - 音量,介于0到1的小数
 
  • startLoop
开始事件循环。
startLoop([useDriverLoop : bool]) -> None
 
  • stop
停止当前正在运行的文本转语音并清理命令队列。 

使用示例

 1、使用pyttsx3播放语音及生成文件
简单示例:
#! /usr/bin/env python3
#-*- coding:utf-8 -*- # pip install pyttsx3 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.connect('started-utterance', onStart)
engine.connect('started-word', onWord)
engine.connect('finished-utterance', onEnd) # 语音转文本测试(直接播放)
engine.say("I will speak this text")
engine.say('I will speak this text!', 'speak') # 注册 speak 关键字,进行事件通知
engine.say("我可以说话了") # 语音转文本测试(文件存储到磁盘)
engine.save_to_file('我可以说话了', 'test.mp3') # 运行并等待
engine.runAndWait()
运行效果如下:

2、使用pyttsx3搭建简单的tts服务

这里使用tornado搭建简单的http服务(tornado是一个开源的网络服务器框架),来实现tts服务。
时序如下:

主逻辑代码如下:

def text2File(text,dstFile):
engine = pyttsx3.init()
engine.save_to_file(text,dstFile)
engine.runAndWait() class MainHandler(tornado.web.RequestHandler):
def get(self):
tmpFile = "1.mp3"
print("get",self.request.arguments)
text = self.get_query_argument("text").strip()
print("text : %s" % text)
if len(text) > 0 :
text2File(text,tmpFile)
self.set_header('content-type', 'audio/mpeg')
fbin = open(tmpFile,"rb").read()
self.set_header('Content-Length', len(fbin))
self.set_header('Content-Disposition', 'attachment;filename="%s"'%tmpFile)
self.write(fbin)
self.finish()
else:
self.set_header('content-type', 'application/json')
self.finish(json.dumps({"result" : "input text "})) def post(self):
print("post")
print(self.request.arguments)

运行效果如下:

本文涉及资源下载地址:https://pan.baidu.com/s/1Dc8zlL2fs8p4ebF916WyXQ

可关注微信公众号(聊聊博文)后回复 2022040401 获得提取码。

使用pyttsx3实现简单tts服务的更多相关文章

  1. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

  2. 【阿里云产品公测】简单日志服务SLS使用评测 + 教程

    [阿里云产品公测]简单日志服务SLS使用评测 + 教程 评测介绍 被测产品: 简单日志服务SLS 评测环境: 阿里云基础ECS x2(1核, 512M, 1M) 操作系统: CentOS 6.5 x6 ...

  3. socket编程,简单多线程服务端测试程序

    socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.acce ...

  4. winsock 编程(简单客户&服务端通信实现)

    winsock 编程(简单客户&服务端通信实现) 双向通信:Client send message to Server, and if  Server receive the message, ...

  5. 用nodejs搭建一个简单的服务监听程序

    作为一个从业三年左右的,并且从事过半年左右PHP开发工作的前端,对于后台,尤其是对以js语言进行开发的nodejs,那是比较有兴趣的,虽然本身并没有接触过相关的工作,只是自己私下做的一下小实验,但是还 ...

  6. S3 服务(Simple Storage Service简单存储服务) 简介(与hdfs同一级)

    图1  spark 相关 亚马逊云存储之S3(Simple Storage Service简单存储服务) (转 ) S3是Simple Storage Service的缩写,即简单存储服务.亚马逊的名 ...

  7. 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单

    调试Django框架写的服务时,需要模拟客户端发送POST请求,然而浏览器只能模拟简单的GET请求(将参数写在url内),网上搜索得到了HttpRequester这一firefox插件,完美的实现了模 ...

  8. lucene构建restful风格的简单搜索引擎服务

    来自于本人博客: lucene构建restful风格的简单搜索引擎服务 本人的博客如今也要改成使用lucene进行全文检索的功能,因此在这里把代码贴出来与大家分享 一,文件夹结构: 二,配置文件: 总 ...

  9. 简单聊聊服务发现(redis, zk,etcd, consul)

    什么是服务发现? 服务发现并没有怎样的高深莫测,它的原理再简单不过.只是市面上太多文章将服务发现的难度妖魔化,读者被绕的云里雾里,顿觉自己智商低下不敢高攀. 服务提供者是什么,简单点说就是一个HTTP ...

随机推荐

  1. 微信小程序结合原生JS实现电商模板(二)

    接 <微信小程序结合原生JS实现电商模板(一)>,在首页列表加入购物车到购物和模块增删数量,动态计算商品价格实现后,本次提交主要实现了商品详情(还不完善)简单页面,从商品详情页跳转到购物车 ...

  2. e值计算来了

    e值该如何计算呢? 若关于ex幂级数展开 ex=1+x+x2/2!+x3/3!+•••+xn/n! 取x=1,有e=1+1/2+1/6+••• 接下来就是十分简单的编程 这里选用了python语言(当 ...

  3. python中的super是什么?

    技术背景 python中的super,名为超类,可以简单的理解为执行父类的__init__函数.由于在python中不论是一对一的继承,还是一子类继承多个父类,都会涉及到执行的先后顺序的问题.那么本文 ...

  4. python写一个web目录扫描器

    用到的模块urliib error #coding = utf-8 #web目录扫描器 by qianxiao996 #博客地址:https://blog.csdn.net/qq_36374896 i ...

  5. sem信号量与死锁的边缘

    1. 演示一个例子,出现死锁,用strace debug得到 #include<stdio.h> #include<pthread.h> #include<stdlib. ...

  6. Git初始化常用方法

    准备工作 安装git sudo apt install git 创建一个ssh密钥 如果已经有ssh密钥了,则这一步不要执行 ssh-keygen -t rsa -C '账号' 复制公钥内容 gedi ...

  7. 【推理引擎】在 VS Code 调试 ONNXRuntime 的测试单元

    背景:在学习如何往ONNXRuntime中添加新算子时,参考了官方测试代码:onnxruntime/test/shared_lib/test_inference.cc,代码内部使用GTest作为单元测 ...

  8. Java锁之乐观锁、悲观锁、自旋锁

    java锁分为三大类乐观锁.悲观锁.自旋锁 乐观锁:乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别 ...

  9. Oracle SQL Developer.exe双击启动错误信息dll未找到

    下载地址:https://www.oracle.com/tools/downloads/sqldev-downloads.html 官网相应的解决方法已经说明了

  10. BeanFactory – BeanFactory 实现举例?

    Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从正真的应用代码中分离. 最常用的BeanFactory 实现是XmlBeanFactory 类.