最近在忙一个小程序蓝牙秤的项目,开发环境为php+小程序,上传物料的时候需要用到语音播报(即将文字转换为语音),于是开始研究,试了几个,最终使用腾讯AI的API来完成这个功能。官网上(http://ai.qq.com/)也有相应教程,大致分为这几个步骤
1.创建应用
填写应用的相关信息,勾选所需的AI技术服务,完成应用的创建,最多可以为应用开放所有的接口权限。
2.获取密钥
在应用创建完毕后,您便可在应用详情中查看到此应用的接入凭证,主要为AppID、AppKey。每个应用唯一标示,互不相同,这两个值需要保存好,后期要用到哦
3.生成签名
应用在调用平台AI技术接口之前,首先需要获取接口鉴权签名。
4.启动开发
一切就绪,便可以开发
上边呢,是大体的步骤,具体知道有这几步就可以了,下面举个实例,更容易让大家理解,其实这个接口的作用就是将文字转换为语音,然后返回文字的语音数据
5.后台配置
- 请求的参数
模型编码
女生 0
女生纯英文1
男生 2
喜道公子 6
语速编码
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.响应参数
后台写好了,前台该怎么展示呢,这里以小程序为例:
6.前台处理
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();
}
})
大致就这么多,如果有不清楚的,或者有更好办法的欢迎留言,共同进步
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。