最近在忙一个小程序蓝牙秤的项目,开发环境为php+小程序,上传物料的时候须要用到语音播报(即将文字转换为语音),因而开始研究,试了几个,最终使用腾讯AI的API来完成这个功能。官网上(http://ai.qq.com/)也有相应教程,大体分为这几个步骤php
填写应用的相关信息,勾选所需的AI技术服务,完成应用的建立,最多能够为应用开放全部的接口权限。json
在应用建立完毕后,您即可在应用详情中查看到此应用的接入凭证,主要为AppID、AppKey。每一个应用惟一标示,互不相同,这两个值须要保存好,后期要用到哦小程序
应用在调用平台AI技术接口以前,首先须要获取接口鉴权签名。api
一切就绪,即可以开发数组
上边呢,是大致的步骤,具体知道有这几步就能够了,下面举个实例,更容易让你们理解,其实这个接口的做用就是将文字转换为语音,而后返回文字的语音数据app
模型编码curl
女生 0
女生纯英文1
男生 2
喜道公子 6ui
语速编码this
0.6倍速 -2
0.8倍速 -1
正常速度 0
1.2倍速 1
1.5倍速 2编码
下面使用PHP实现该HTTP API调用(text即为待合成的语音)
public function actionBluetoothScaleVoice() { $data = Yii::$app->request->get('data'); $appkey = 'Ejxghuuuuuuuuu'; $params = array( 'app_id' => '11060809832473294', 'text' => $data, 'model_type' => '0', 'speed' => '0', 'time_stamp' => strval(time()), 'nonce_str' => strval(rand()), 'sign' => '', ); $params['sign'] = $this->getReqSign($params, $appkey); // 执行API调用 $url = 'https://api.ai.qq.com/fcgi-bin/aai/aai_tta'; $response =$this->doHttpPost($url, $params); return $response; } //获取签名 public function getReqSign($params /* 关联数组 */, $appkey /* 字符串*/) { // 1. 字典升序排序 ksort($params); // 2. 拼按URL键值对 $str = ''; foreach ($params as $key => $value) { if ($value !== '') { $str .= $key . '=' . urlencode($value) . '&'; } } // 3. 拼接app_key $str .= 'app_key=' . $appkey; // 4. MD5运算+转换大写,获得请求签名 $sign = strtoupper(md5($str)); return $sign; } //执行请求 public function doHttpPost($url, $params) { $curl = curl_init(); $response = false; do { // 1. 设置HTTP URL (API地址) curl_setopt($curl, CURLOPT_URL, $url); // 2. 设置HTTP HEADER (表单POST) $head = array( 'Content-Type: application/x-www-form-urlencoded' ); curl_setopt($curl, CURLOPT_HTTPHEADER, $head); // 3. 设置HTTP BODY (URL键值对) $body = http_build_query($params); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $body); // 4. 调用API,获取响应结果 curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_NOBODY, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $response = curl_exec($curl); if ($response === false) { $response = false; break; } $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 200) { $response = false; break; } } while (0); curl_close($curl); return $response; }
2.响应参数
后台写好了,前台该怎么展现呢,这里以小程序为例:
1.在页面中添加audio标签
<audio src="" id="myAudio" ></audio>
2.添加请求
wx.request({ url: 'https://xxxx.com', data: { data: "待合成的语音数据"}, method: "get", header: { 'content-type': 'application/json' // 默认值 }, dataType: "json", success: function (res) { let myAudio = wx.createAudioContext('myAudio'); myAudio.setSrc("data:audio/mp3;base64," + res.data.data.voice); myAudio.play(); } })
大体就这么多,若是有不清楚的,或者有更好办法的欢迎留言,共同进步