网站建设研究的意义,大连市的网络平台有几家,平湖市住房和城乡规划建设局网站,前端开发简历模板单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播)#xff0c;但是市面上多数语音播放软件都是收费的#xff0c;要么发音失真#xff0c;要么不够稳定——经常出现莫名其妙的故障#xff0c;容易给工作带来被动。学Python这么久不如动手写一款自己的…单位经常使用广播进行临时事项的通知(将文字转换为语音然后通过功放广播)但是市面上多数语音播放软件都是收费的要么发音失真要么不够稳定——经常出现莫名其妙的故障容易给工作带来被动。学Python这么久不如动手写一款自己的语音广播软件即使发生故障也可以自行排除。1界面设计在开始动工之前当然要分析需求我要的核心功能是将一段文字通知输入软件然后将其转换为语音并播放出来。这项功能虽然并不复杂但也需要一个交互式的界面所以决定使用Tkinter来实现这个功能。第一步:建立一个窗体设置标题、大小等要素为了避免显示格式错乱将其设定为不可改变大小代码如下:第二步设置一个控件用于接受收入的文字这里选择带滚动条的Text代码如下第三步提供选项作为一款语音播放软件最基本的语速、音调等风格设置还是要有的这里使用Combobox控件提供固定选项用户可以根据情况选择不同的发音、语速和语调。第四步建立功能事件的触发接口设置三个Button控件分别用于触发“语音播放”、“文本清除”和“界面退出”功能。最终界面效果如下2语音播放关于“清除”、“退出”等功能相对比较简单这里重点对本次的核心功能——语音播放进行详细说明。1).语音接口文本转换语音推荐使用百度云的REST API 接口登录网站http://ai.baidu.com/依次进入控制台——语音技术页面创建自己的语音应用(下图)其中AppID 、API Key 、Secret Key 三个参数在代码中会用到。然后使用 pip install baidu-aip 安装python SDK模块我们来看一下函数原型:APP_ID XXXXXXAPI_KEY XXXXXXXXXXXXXSECRET_KEY XXXXXXXXXXXXXXXXXXXXXXclient 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导入其他库的时候尽量有选择性不要导入整个库不然打包后的文件会非常庞大。