当前位置: 首页 > 后端技术 > PHP

移动端快速接入语音播报

时间:2023-03-29 20:44:43 PHP

最近在忙一个蓝牙小程序项目。开发环境为php+小程序。上传素材的时候需要语音播报(也就是把文字转成语音),于是开始研究尝试了好几种,最后使用腾讯AI的API完成了这个功能。官网(http://ai.qq.com/)也有相应的教程,大致分为这几步1.创建应用填写应用的相关信息,勾选需要的AI技术服务,完成应用程序的创建。可以为应用开放所有接口权限。2.获取密钥创建应用后,可以在应用详情中查看应用的访问凭证,主要有AppID和AppKey。每个应用程序都具有唯一标记并且彼此不同。这两个值需要保存好,后面会用到。3、生成签名应用在调用平台AI技术接口前,首先需要获取接口认证签名。4.开始开发。一切准备就绪后,就可以开发上面的内容了。这些是一般步骤。您只需要详细了解这些步骤即可。这里举个例子,方便大家理解。其实这个接口的作用就是将文字转化为语音,然后返回文字的语音数据5.后台配置请求的参数模型代码。API调用(文本为要合成的语音)publicfunctionactionBluetoothScaleVoice(){$data=Yii::$app->request->get('data');$appkey='Ejxghuuuuuuuuuu';$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);返回$响应;}//获取签名公趣actiongetReqSign($params/*associativearray*/,$appkey/*string*/){//1.对字典进行升序排序ksort($params);//2.按URL键值对$str='';foreach($paramsas$key=>$value){if($value!==''){$str.=$key.'='.urlencode($value)。'&';}}//3.拼接app_key$str.='app_key='.$应用密钥;//4.MD5运算+大写转换得到请求签名$sign=strtoupper(md5($str));返回$符号;}//执行请求publicfunctiondoHttpPost($url,$params){$curl=curl_init();$响应=假;do{//1.设置HTTPURL(API地址)curl_setopt($curl,CURLOPT_URL,$url);//2.setHTTPHEADER(formPOST)$head=array('Content-Type:application/x-www-form-urlencoded');curl_setopt($c网址,CURLOPT_HTTPHEADER,$头);//3.设置HTTPBODY(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);如果($response===false){$response=false;休息;}$code=curl_getinfo($curl,CURLINFO_HTTP_CODE);如果($code!=200){$response=false;休息;}}而(0);curl_close($curl);返回$响应;}2.响应后台写好参数后,前台应该怎么显示呢?下面是一个小程序的例子:6.前台处理1.在页面中添加音频标签2.添加Requestwx.request({url:'https://xxxx.com',data:{data:"待合成的语音数据"},method:"get",header:{'content-type':'application/json'//默认值},dataType:"json",success:function(res){letmyAudio=wx.createAudioContext('myAudio');myAudio.setSrc("data:audio/mp3;base64,"+res.data.data.voice);myAudio.play();}})就这样吧,如果有不清楚的地方,或者有更好的方法,欢迎留言,共同进步