之前公司做了一个支付语音提醒功能,由于每次支付的金额不确定,于是不能使用固定的音源来作为提示音。于是想到了百度语言合成接口,通过开发调试,实现不同支付金额提示音。 代码如下 api.php <pre>//百度语音合成public function bdtsn(){ $appid = '86***17';//填写自己的appid $apikey = 'BRIviMY56F3W0yknlq81g***';//填写自己的 $secretkey = '6d49f9ecc9588913566eb6bb0185d***';//填写自己的 $tex = I('tex','','trim');//要合成音源的文字(比如: 成功收款0.01元 ) if(!$tex){ $this->error('字符非法'); } $tex = urlencode($tex); //语言文件地址 $file = './Uploads/Mp3/'.md5($tex).'.mp3'; //本地缓存音源的路径 避免同样提示音重复去百度生成 if(!file_exists($file)){ //缓存名称 $name = 'bdtsn_'.$appid; if(!$json = S($name)){ //获取百度语音token信息 并缓存 $jsonStr = http_post('https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id='.$apikey.'&client_secret='.$secretkey); $json = json_decode($jsonStr,true); S($name,$json,$json['expires_in']); } if(!$json){ $this->error('token获取失败'); } //获取语语音数据 并生成 本地mp3文件 $url = 'http://tsn.baidu.com/text2audio?tex='.$tex.'&lan=zh&cuid='.$appid.'&ctp=1&tok='.$json['access_token']; $data = file_get_contents($url); if(!$json){ $this->error('音频数据获取失败'); } file_put_contents($file,$data); } if($file){ $this->success('success',$file);//返回本地音源路径 }}</pre> 其中用到了自定义函数http\_host() 代码如下 function.php <pre>/** * POST 请求 * @param string $url * @param array $param * @param boolean $post_file 是否文件上传 * @return string content */function http_post($url,$param,$post_file=false){ $oCurl = curl_init(); if(stripos($url,"https://")!==FALSE){ curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } if (is_string($param) || $post_file) { $strPOST = $param; } else { $aPOST = array(); foreach($param as $key=>$val){ $aPOST[] = $key."=".urlencode($val); } $strPOST = join("&", $aPOST); } curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); if(intval($aStatus["http_code"])==200){ return $sContent; }else{ return false; }}</pre> 仅此笔记,希望能帮助大家。
ThinkPHP百度语音合成方法
2017-04-17
本文作者: 小罗同学
原文链接: ThinkPHP百度语音合成方法
版权声明: 本站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
免责声明: 文中如涉及第三方资源,均来自互联网,仅供学习研究,禁止商业使用,如有侵权,联系我们24小时内删除!
评论1
暂时没有评论