python语音合成并播放_语音合成篇

语音合成是通过机械的、电子的方法产生人造语音的技术。TTS技术(又称文语转换技术)隶属于语音合成,它是将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的汉语口语输出的技术

呵呵,以上来自百度百科。我做语音合成的初衷是能够实现一个可以语音交互的家用助理。可以语音发出指令,可以语音反馈结果。比如:我出门的时候,可以说:小白,我出去玩一会儿,半个小时后提醒下我。半个小时后,我的手机能够收到一个push信息;又或者每天早上7点半给我播报下天气情况,再或者在我程序的逻辑里面潜入语音模块,告诉我进度,不要我再去看日志等等,总之语音交互的场景好多,也很诱人。当然了这些都是我的构想,真正哪些是能够实现了,还不好说。先从最简单的开始吧:

语音合成目前比较热门的有:科大讯飞、Google、百度几个大厂商在做,其它开源的框架也比较多。考虑了下还是抱大厂商的大腿比较靠谱点。各个大厂商都提供了SDK和在线API。喜欢的自己去搜把。我这里使用的是:百度语音合成

REST API。在线地址为:http://yuyin.baidu.com/

。使用之前需要申请开发者资格,并申请API-KEY,不细说了,大家自己想办法把,不清楚的可以Q我。以下是我申请后的API-KEY

sg_trans.gif

API-KEY搞定之后。先学习下在线文档:http://yuyin.baidu.com/docs/tts。原来在合成之前,需要先申请 Access

Token。然后在语音合成的时候带上Token。Access Token

有效期为一个月,开发者需要对 Access Token的有效性进行判断,如果Access

Token过期可以重新获取。“语音合成”服务开通成功后即可获得200000次/日的在线调用次数配额。这个还是蛮良心的,如果不是企业应用,纯个人使用的话,足够了。

学习API文档后,总体思路如下:

首先获取token,然后保存到本地,然后进行语音合成,如果在合成的过程中,遇到:502-token验证失败的错误后,重新获取token,再次进行语音合成。怎么样简单吧。由于我计划在树莓派上部署,所以直接python了。

开工:

第一步:获取token,

​利用python的urllib库,发送post请求,并使用json解析器对结果进行解析,如果解析成功返回access_token,提供给下一步语音合成使用。其中client_id,client_secret为我们前面申请到的API-KEY和Secret-KEY。

sg_trans.gif

第二步,在线合成语音:

首先按照协议格式发送POST请求到服务端,然后如果服务端返回audio格式则保存到本地,否则解析出错误描述。

sg_trans.gif

sg_trans.gif

第三步:播放语音,这个自己想办法吧,不在本文讨论范围内,下次有时间再奉上。

​​

打完收工。完整代码,见百度网盘http://pan.baidu.com/s/18rFmm,压缩包解密密码为:w106。其中有几个几个关键点需要大家注意:

1、python的编码问题。​百度返回的是Unicode编码的字符,在和python内置编码做相加的时候,需要做Unicode处理,怎么处理,大家看源码吧。

2、百度语音API,需要将先申请token,再使用。建议大家申请后做个缓存,不要每次都申请,申请token响应比较慢。

3、源代码中,除了核心代码外,还涉及到许多类继承、异常处理和日志,这个是可维护性和稳定性的主要保证,不关心的同学们无视。

4、​源代码中,是从现有工程中copy出来的,可能有不太完整的地方,不保证能够运行起来,但是可以参考核心实现。指望把代码拿下来直接运行的同学可以无视。

基础功能完成了,大家来一起发挥想象力吧,怎么来做一个有意思的TTS了,有好想法大家一起交流。​

你可能感兴趣的:(python语音合成并播放)