单位经常用广播来通知临时的事情(把文字转成语音然后通过功放播放),但是市面上的语音播放软件大多是收费的,或者发音失真或者不稳定够了——经常会出现莫名其妙的故障,很容易给工作带来被动。学了这么久的Python,还不如自己写语音播报软件呢,就算出现故障,也可以自己排查。1在开始构建之前需要分析界面设计。我要的核心功能是在软件中输入一段文字通知,然后转换成语音播放出来。这个功能虽然不复杂,但是也需要交互界面,所以决定使用Tkinter来实现这个功能。第一步:创建一个表单,设置标题、大小等元素。为了避免显示格式混乱,请将其设置为不可更改的大小。代码如下:第二步,设置一个控件来接受收入的文本。滚动条的文字,代码如下:第三步,提供选项。作为一款语音播放软件,语速、音高等最基本的风格设置还是需要的。这里使用Combobox控件提供固定的选项,用户可以根据情况选择不同的。发音、语速和语调。第四步,建立功能事件的触发接口,设置三个Button控件分别触发“语音播放”、“文字清除”、“界面退出”功能。最终界面效果如下:2语音播放“清除”和“退出”功能比较简单。下面我们就着重对本次的核心功能——语音播放进行详细介绍。1).语音接口文字转语音推荐使用百度云的RESTAPI接口,登录网站http://ai.baidu.com/,依次进入控制台--语音技术页面,并创建自己的语音应用(下图),其中AppID、APIKey、SecretKey是代码中会用到的三个参数。然后使用pipinstallbaidu-aip安装pythonSDK模块,我们看一下函数原型:thesyn(.syntext,'zh',1,{'per':1,'vol':15,'pit':9,'spd':5})text:要转换的文本。per:选择说话者,0为女声,1为男声,3为情感合成-杜逍遥,4为情感合成-杜雅雅,默认为普通女声。vol:音量,取值0-15,默认为5volumepit:音调,取值0-9,默认为5声调。spd:语速,取值范围为0-9,默认为5档语速。'zh'和1分别是语音模式和客户端类型,都是固定值,不可修改。可以看出,我们需要的发音、音调、语速三种风格都可以通过修改参数来实现。2).功能设计解决了语音合成界面的问题,具体功能可以结合界面设置实现。首先,要求界面中的语音风格选项与语音合成功能的参数一一对应。这是一个典型的key-value对应关系,字典这样的数据结构就完美了。然后,在发音风格上,选择了男声、女声、混声三种模式;***对于音调和语速,不需要设置太细的精度等级,这里选择跨度明显的三个等级来区分。单击“播放”按钮时,应从文本控件中读取文本。如果文本为空,会弹出提示框要求重新输入;如果文本不为空,则将文本转换为音频文件并使用playsound播放。这里有个问题需要特别注意,就是在软件运行过程中,生成播放的音频文件是不能删除、修改、覆盖的,所以每次转换生成的音频文件的名字一定不能重复,否则会多次执行“播放”操作,因新生成的音频文件无法保存而失败。3打包打包目前为止,本软件的运行依赖于本地的python开发环境,不能方便的提供给他人。这里推荐使用Pyinstaller的第三方库来打包python程序。首先进入刚才py文件所在的目录,执行以下cmd命令。其中“-w”的作用是不显示命令窗口,tk_voice是刚才的py文件名。pyinstaller-wtk_voice.py此时会在同级目录下生成一个dist文件夹,里面是打包好的程序文件。我们运行.exe文件,就会出现之前设计好的程序界面。在文本框中输入一段测试文字:“请注意所有人员,请注意所有人员,请立即下楼吃饭。”,点击“播放”按钮试一下效果:插入音频-----测试.mp3***,使用Pyinstaller有几点需要注意:这种方法只适用于windows系统,对系统版本有严格的要求,比如64位系统下打包的程序不能在32位系统下运行。如果程序中调用了一些外部图片或者其他资源文件需要打包,需要手动复制到打包的文件夹中,因为Pyinstaller不会打包这些文件。如果中途用Pyinstaller打包失败,可能会丢失原来py文件的内容,所以打包前最好做好备份。使用import导入其他库时,尽量有选择性。不要导入整个库,否则打包后的文件会很大。本文使用python写了一个语音播放软件,主要涉及Tkinter、baidu-aip、playsound、pyinstaller。可实现基本的语音合成和播放功能,无需python开发环境即可运行,便于自行维护和扩展。缺点界面比较简单,功能比较单一,有兴趣的小伙伴可以自行修改完善。
