Python|让代码替你“说话”
程序员,在其他人眼中往往都是高冷的存在,在他们的眼中能用代码解决的问题绝对不考虑其他的方法,本文让我们用Python来提升一下高冷的档次,让我们用代码来“说话”。
1安装pyttsx3
安装
下面就让我们来看一下Python是怎样开口“说话“的。
我们先安装需要的库pyttsx3:
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。
2函数说明
本节我们再来了解一下pyttsx3.engine.Engine
中所对应的函数说明。
- connect
参数:
topic(string):要描述的事件名称;
cb(callable):回调函数。
返回值:
dict
函数说明:
在给定的topic上添加回调通知
- disconnect
参数:
token(dict):回调失联的返回标记
返回值:
Void
函数说明:
结束连接
- endLoop
函数说明:
简单来说就是结束事件循环
- getProperty
参数:
name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
name(string):voice: 语音的字符串标识符。
name(string):voices: pyttsx3.voice.Voice描述符对象列表。
name(string):volume:音量的大小。
返回值:
Object
函数说明:
获取当前引擎实例的属性值。
- setProperty
参数:
name(string):rate: 每分钟字数的语音速率,默认为每分钟200个。
name(string):voice: 语音的字符串标识符。
name(string):volume:音量的大小。
value(int):rate: 设置每分钟读的字数。
value:voice:设置发音,后文中会再讲到。
valu(float):volume:设置音量大小,0.0-1.0之间;默认1.0。
返回值:
Object
函数说明:
获取当前引擎实例的属性值。
- say
参数:
text(unicode):要进行朗读的文本数据。
name(strin):关联发音人(一般用不到)
函数说明:
预设要朗读的文本数据
- runAndWait
函数说明:
当事件队列中事件全部清空的时候返回。
- startLoop
参数:
[useDriverLoop(bool)]:是否启用驱动循环。
函数说明:
开启事件队列
- stop
函数说明:
停止当前讲话并清除命令队列。
3简单的中文发音
先来让我们学习一下最简单的“说话”方法,我们不需要进行任何的设置,只要传入想要朗读的文本就可以了。
# 语音播报模块
import pyttsx3
# 模块初始化
engine = pyttsx3.init()
print('准备开始语音播报...')
engine.say('我高冷,我并不想说话~')
# 等待语音播报完毕
engine.runAndWait()
4设置参数的发音方式
在进行设置参数的发音方式的时候,我们需要注意一点,在该模块的内置声音选择函数执行的时候将并不能匹配中文发音,所以我们用英文来进行一下默认参数的尝试。
# 语音播报模块
import pyttsx3
# 模块初始化
engine = pyttsx3.init()
print('准备开始语音播报...')
# 设置发音速率,默认值为200
rate = engine.getProperty('rate')
engine.setProperty('rate', rate - 50)
# 设置发音大小,范围为0.0-1.0
volume = engine.getProperty('volume')
engine.setProperty('volume', 0.6)
# 设置默认的声音:voices[0].id代表男生,voices[1].id代表女生
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)
# 添加朗读文本
engine.say('Not everyone can become a great artist.')
# 等待语音播报完毕
engine.runAndWait()
5有趣的中文方言发音
虽然在内置的发音方式中我们不能更换音色,但是经过一番查找后我发现,我们还可以去调用其他的语音播报API,这样就完美的解决了更改发音的问题,并且还能支持很多方言,来用我们最开始听到的语音播报来举个例子,代码如下:
# 语音播报模块
import pyttsx3
msg = '''今天我,寒夜里看雪飘过
怀着冷却了的心窝漂远方
风雨里追赶,雾里分不清影踪
天空海阔你与我
可会变(谁没在变)
多少次,迎着冷眼与嘲笑
从没有放弃过心中的理想
一刹那恍惚, 若有所失的感觉
不知不觉已变淡
心里爱(谁明白我)
原谅我这一生不羁放纵爱自由
也会怕有一天会跌倒
背弃了理想 ,谁人都可以
哪会怕有一天只你共我
'''
# 模块初始化
engine = pyttsx3.init()
volume = engine.getProperty('volume')
# 标准的粤语发音
voices = engine.setProperty(
'voice', "com.apple.speech.synthesis.voice.sin-ji")
# 普通话发音
# voices = engine.setProperty(
# 'voice', "com.apple.speech.synthesis.voice.ting-ting.premium")
# 台湾甜美女生普通话发音
# voices = engine.setProperty(
# 'voice', "com.apple.speech.synthesis.voice.mei-jia")
print('准备开始语音播报...')
# 输入语音播报词语
engine.setProperty('volume', 0.7)
engine.say(msg)
engine.runAndWait()
engine.stop()
- CaseStudy(showcase)布局篇-全屏效果
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(14)-EasyUI缺陷修复与扩展
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(10)-系统菜单栏[附源码]
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(8)-MVC与EasyUI DataGrid 分页
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(5)-EF增删改查
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(11)-系统日志和异常的处理①
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
- No.3 啥是数据运营(三):思维方式
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(7)-MVC与EasyUI DataGrid
- MySQL数据同步【双主热备】
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(6)-Unity 依赖注入
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(4)-创建项目解决方案
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux虚拟网络设备之vlan配置详解
- Centos7安装完后无法联网的解决方法
- Linux静态链接库与模板类的处理方式
- 深入研究RocketMQ消费者是如何获取消息的
- CentOS7下 Apache的安装配置方法
- expect命令在linux下实现批量ssh免密
- 学习Vim合并行的方法和技巧
- 九种查找算法
- 代码防御性编程的十条技巧
- Ubuntu终端多窗口分屏Terminator
- linux 编译安装python3.6的教程详解
- Unix/Linux系统下的nobody用户与nologin详细介绍
- 详解flutter engine 那些没被释放的东西
- Centos7安装PHP及Nginx的教程详解
- Flutter Image实现图片加载