Sunday, November 5, 2017

TTS:LabVIEW下调用百度TTS API实现文字转语音

        大概2年前吧,接到客户的一个需求:测试结束后能不能把测试结果用语音播报出来?一些人机配合的地方,也加上语音提示。当然了,这完全是没有问题的,不就是播放一些音频文件嘛,LabVIEW自带就支持wav文件的直接播放。然后就是怎么制作这些语音文件呢?总不能自己录吧,那太土了!现在各大手机导航平台不都支持各种语音风格么,当时就找到了百度语音。使用百度语音TTS来制作这些语音文件。当然,当初只是在线生成了几个固定的语音文件。强迫症患者表示,一定要实现自动在线转换。今天就是这个主题。


        第一步,首先的注册一个百度开发者账号,这个是免费的。http://yuyin.baidu.com/tts,百度目前提供三大语音服务(识别,合成,唤醒),而TTS就是我们这次所要用的语音合成服务。创建一个应用,会自动生成三个参数:App ID, API Key以及Secret Key。这是几个非常关键的参数,后续会用到。

        第二步,获取Access Token,这个就需要用到第一步获取的两个参数。具体参考百度官方教程:http://yuyin.baidu.com/docs/tts/135。 摘录如下:

        使用语音识别及合成REST API 需要获取 Access Token。Access Token 是用户身份验证和授权的凭证,语音识别采用的是Client Credentials授权方式,即采用应用公钥(Api Key)、密钥获取Access Token,适用于任何带server类型应用,通过此授权方式获取Access Token仅可访问平台授权类的接口,使用Client Credentials获取Access Token需要应用在其服务端发送请求(推荐用POST方法)到百度OAuth2.0授权服务的" https://openapi.baidu.com/oauth/2.0/token "地址上,并带上以下参数:

  • grant_type:必须参数,固定为"client_credentials";

  • client_id:必须参数,应用的 API Key;

  • client_secret:必须参数,应用的 Secret Key;

        响应数据包如下所示,其中 "access_token" 字段即为请求 REST API 所需的令牌, 默认情况下,Access Token 有效期为一个月,开发者需要对 Access Token的有效性进行判断,如果Access Token过期可以重新获取。百度目前的有效期是一个月,但是失效后可以自由的再生成一个新的Token,所以在写程序的时候通常就是先判断Token是否有效,如果失效就重新生成一个,这个刷新的过程目前好像没有限制。


        第三步,生成语音文件。具体参数详见官方说明http://yuyin.baidu.com/docs/tts/136。通过HTTP协议下的POST或GET模式均可以完成。LabVIEW代码也非常简洁:一个VI即可。


        通过百度语音工具包,可以让语音播报功能跟语音导航一样丰富多彩。有几点说明:中文需转化为UTF-8编码,每次转换的长度不能超过1024字符,也就是512个中文,服务完全依赖百度的免费政策,不能保证永久有效,文中方式需网络支持,目前百度SDK也支持离线转换。


       完整代码如下图



        公开本次测试的密钥,不想注册百度开发者的用户也可以直接使用。

API Key: HxPBVGrRw2w20kmXljrPW6rj

Secret Key: FkmLKunqnBTZY8w2t5sGFKXHvKBgu1YX

Access Token:24.6bf26153cd4a81e4e1c79d6da89d6add.2592000.1512442552.282335-5203061(目前有效期还有一个月,过期后需要根据上述第二步自己重新生成。)


需要VI代码的可以联系support@itestgroup.com

If need the demo code of this post, please contact support@itestgroup.com


No comments:

Post a Comment