单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播),但是市面上多数语音播放软件都是收费的,要么发音失真,要么不够稳定——经常出现莫名其妙的故障,容易给工作带来被动。学Python这么久不如动手写一款自己的语音广播软件,即使发生故障也可以自行排除。

1

界面设计

在开始动工之前当然要分析需求,我要的核心功能是将一段文字通知输入软件,然后将其转换为语音并播放出来。

这项功能虽然并不复杂,但也需要一个交互式的界面,所以决定使用Tkinter来实现这个功能。

第一步:建立一个窗体

设置标题、大小等要素,为了避免显示格式错乱将其设定为不可改变大小,代码如下:

第二步,设置一个控件

用于接受收入的文字,这里选择带滚动条的Text,代码如下:

第三步,提供选项

作为一款语音播放软件,最基本的语速、音调等风格设置还是要有的,这里使用Combobox控件提供固定选项,用户可以根据情况选择不同的发音、语速和语调。

第四步,建立功能事件的触发接口

设置三个Button控件分别用于触发“语音播放”、“文本清除”和“界面退出”功能。

最终界面效果如下:

语音播放

关于“清除”、“退出”等功能相对比较简单,这里重点对本次的核心功能——语音播放进行详细说明。

1).语音接口

文本转换语音推荐使用百度云的REST API 接口,登录网站http://ai.baidu.com/,依次进入控制台——语音技术页面,创建自己的语音应用(下图),其中AppID 、API Key 、Secret Key 三个参数在代码中会用到。

然后使用 pip install baidu-aip 安装python SDK模块,我们来看一下函数原型:

APP_ID = 'XXXXXX'

API_KEY = 'XXXXXXXXXXXXX'

SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXX'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result = client.synthesis(text, 'zh', 1, {'per':1, 'vol':15, 'pit':9, 'spd':5 })text:需要转换的文字。

per:发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女声。vol:音量,取值0-15,默认为5中音量

pit:音调,取值0-9,默认为5中语调。

spd:语速,取值0-9,默认为5中语速。‘zh’和1分别为语音模式和客户端类型,该两项均为固定值,不支持修改。

可以看到,我们需要的发音、音调、语速三种风格都可以通过修改参数来实现。

2).功能设计

解决了语音合成接口的问题,就可以结合界面设置来实现具体功能了。首先,要将界面中的语音风格选项与语音合成函数参数一一对应起来,这是一个典型的键与值的对应关系,使用字典这种数据结构再合适不过了。

然后对于发音风格,选取了男声、女声、混合三种模式;

最后对于音调和语速,没必要设置过细的精度等级,这里分别选取了三个跨度明显的等级进行区分。

当“播放”按钮点击时,要从Text控件中读取文本,如果文本为空则弹出提示框要求重新输入;若文本不为空则将文本转换为音频文件并使用playsound进行播放。

这里有一个问题需要特别注意,那就是在软件运行过程中,生成并播放的音频文件不可删除、不可修改、不可覆盖,所以每次转换生成的音频文件名称绝对不能重复,否则在进行多次“播放”操作时,会因为新生成的音频文件无法保存而发生故障。

3

打包封装

到目前为止,这个软件的运行要依赖于本地的python开发环境,不能方便地提供给他人使用,这里推荐Pyinstaller的第三方库来对python程序进行打包,首先进入刚才的py文件所在目录,执 行以下cmd命令。其中“-w”的作用是是不显示命令窗口,tk_voice是刚才的py文件名称。

pyinstaller -w tk_voice.py

这时,在同一目录下会生成一个dist文件夹,这里面就是打包后的程序文件了。我们运行一下其中的.exe文件,就会出现之前设计的程序界面,在文本框中输入一段测试文字:“全体人员请注意,全体人员请注意,请立即下楼集合开饭。”,点击“播放”按钮试一下效果:

插入音频————测试.mp3

最后,关于Pyinstaller的使用有几点需要注意的地方:该方法仅适用于windows系统,而且对系统版本有比较严格的要求,比如64位系统下打包的程序无法在32位系统下运行。

如果需要打包的程序中调用了外部的一些图片或其他资源文件,则需要手动复制到打包后的文件夹内,因为对于这些文件Pyinstaller不会进行打包。

使用Pyinstaller打包如果出现中途失败的情况,可能会导致原py文件内容丢失,所以打包之前最好先进行备份。

使用import导入其他库的时候尽量有选择性,不要导入整个库,不然打包后的文件会非常庞大。

python输出到语音播放_用Python写一个语音播放软件相关推荐

  1. python输出到文件乱码_解决python解析文件时输出乱码

    首先获取到json模块,encoding指定文件编码utf-8,errors报错时忽略错误,print()输出结果看看是否有问题. # -*- coding: utf-8 -*- import jso ...

  2. python输出结果空格分割_用Python编写固定宽度,以空格分隔的CSV输出

    我想使用Python的csv编写器编写一个固定宽度,空格分隔和最小引用的CSV文件. 输出示例: item1 item2 "next item1" "next item2 ...

  3. python输出转义符字符_[8] Python转义字符和切片

    1. 概述 今天我们要补充一下字符串和列表的相关内容.加粗体代表我们已经介绍的内容,斜体代表新增内容.计算机编程的原理简要介绍 集成开发环境PyCharm 变量名.数字.字符串.列表 句式 输入和输出 ...

  4. python输出结果空格分割_使用Python分割ps的输出

    在Linux上,命令ps aux输出每个统计信息具有多个列的进程列表.例如 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND ... pos ...

  5. python输出随机字母矩阵_用python生成随机矩阵

    在下面的代码中,我对一般的平方线性系统Ax=b实现了带有部分旋转的高斯消去.我测试了我的代码,它产生了正确的输出.不过,现在我正在尝试做以下事情,但我不太确定如何编码它,寻找一些帮助与此!在 我想通过 ...

  6. python输出星期名缩写_在Python中解析带有时区缩写名称的日期/时间字符串?

    小编典典 dateutil的parser.parse()接受作为关键字参数tzinfos的类型的字典{'EST': -5*3600}(即,区域名称匹配GMT以秒偏移量).因此,假设我们有,我们可以这样 ...

  7. python输出自己的名字_【Python】Python-用大写字母打印你的名字

    http://www.cnblogs.com/xiashengwang/p/4294409.html 与孩子一起编程,有个作业题:用大写字母打印你的名字. CCCC A RRRRR C C A A R ...

  8. python输出最长字符串_使用Python打印最长的字母子字符串,并打结...

    我将通过以下方式解决该问题: >让我们定义两个字符串:当前字母递增的字符串和当前最长的字符串. >两个字符串都以第一个字母初始化. (这样我们就可以随时阅读他们的最后一封信.) >然 ...

  9. python输出200以内素数_用python输出100-200间的素数怎么输出?

    满意答案 MolanXi 推荐于 2019.09.19 采纳率:44%    等级:10 已帮助:1271人 from math import ceil def sushu(x): "&qu ...

  10. python输出一首诗_用Python自动生成藏头诗

    本文首发于公众号「老肥码码码」 前几天老肥给大家介绍了有意思的藏头诗,今天我们就来自己根据输入语句实现自动生成藏头藏尾诗吧. 整个诗句生成的逻辑是这样的,先根据输入语句爬取符合要求的诗句(来自百度汉语 ...

最新文章

  1. 英语与计算机的整合,浅谈计算机应用与英语教学的整合
  2. Spring boot的Spring MVC自动配置
  3. ​WeihanLi.Npoi 根据模板导出Excel
  4. 动手造轮子:实现一个简单的依赖注入(二) --- 服务注册优化
  5. vb.net服务器启动后cpu占用了70_记一次服务器被异常程序占用的解决过程(怀疑黑客攻击)...
  6. Mac 加入环境变量
  7. 2021首届“科创中国”开源创新榜评选来了,你优秀的开源内容应该上榜,立即参加
  8. tensorflow2实现unet, 完成眼底血管分割任务
  9. 合作式智能运输系统 车用通信系统应用层及应用数据交互标准 第二阶段_为什么一定要了解OPC UA TSN——未来的工业通信标准...
  10. php 0x80004005,错误类型:Provider (0x80004005)未指定的错误 的一个处理方法
  11. 测试固态硬盘寿命软件,SSD能用多久在哪看 检测固态硬盘寿命方法
  12. 软件测试之独步武林系列(一)
  13. kali 安装星火应用商店(半成品
  14. Oracle EBS专业术语与名词解释
  15. 电路的基本概念(1) 自学笔记
  16. TCHAR数据类型介绍
  17. 虚拟机服务器负荷,虚拟机中服务的负荷评估和负载均衡方法
  18. 微软ghost系统分类合集
  19. 黑马程序员Bootstrap P192-199
  20. gitbook 插件 主题

热门文章

  1. NeurIPS | 3D-BoNet:3D 点云实例分割的新框架
  2. 轻松学Pytorch –使用torchvision实现对象检测
  3. 使用Mask-RCNN在实例分割应用中克服过拟合
  4. 摆动排序leetcode324
  5. 编译语言与解释语言,动态与静态,以及强类型和弱类型的区别
  6. Spring踩坑记录
  7. 面对不同用户,数据中心如何将服务做到极致
  8. PhalGo-Request
  9. InnoDB: Failing assertion: trx-isolation_level == TRX_ISO_READ_UNCOMMITTED
  10. 分享一个监控MFS的nagios插件