php调用讯飞语音合成

开发背景:需要机器阅读文档,看了bat和讯飞的,领导决定用讯飞的,其实bat的也非常好
废话又多了,直接看代码吧

header("Content-type: text/html; charset=utf-8");
$url = 'http://api.xfyun.cn/v1/service/v1/tts';
$appid = 'xxxxx';
$appkey = 'xxxxxxx';
$data = array(
    'auf' => 'audio/L16;rate=16000',
    'aue' => 'lame',
    'voice_name' => 'xiaoyan',
);
$time = (string) time();

$xparams = base64_encode(json_encode($data));
$checksum = md5($appkey . $time . $xparams );

$header = array(
    'X-CurTime:' . $time ,
    'X-Param:' . $xparams,
    'X-Appid:' . $appid ,
    'X-CheckSum:' . $checksum,
    'X-Real-Ip:127.0.0.1',
    'Content-Type:application/x-www-form-urlencoded; charset=utf-8',
    
);
$content = array(
        'text' => '陈寿给曹操的第一个评价叫机智聪明,曹操从小就聪明,而且还很有学问。曹操是一个大文学家,甚至于他开创了一个文学时代。所谓建安风骨开创者就是三曹,开先河的第一个人就是曹操,然后才是他的俩儿子。后来才有的建安七子,曹操是的聪明人这是毫无争议这个评价很准确。有争议的是这个聪明是不是用对了地方,要是没有品德的支撑,人越聪明越是祸害。后来历史中对陈寿说的这个聪明就是他用错了地方,心术不正,这是后人的评论,但是陈寿并没有这么说。第二个评价就是曹操从小就有权数,原文用的就是权数这两个字。这个权数和会使用权利不是一个意思,权在古代是计算的意思,数在古代不是计算的意思,而是变化的意思。'
);

$response = tocurl($url, $header, $content);
$header = $response['header'];
$file = './audio/';
if($header['content_type'] == 'audio/mpeg'){
    $filename .=  $file . $time . '.mp3';
    $res = file_put_contents($filename, $response['body']);
    var_dump($res);
}else{
    echo $response['body'];
}


 /**
 * 发送数据
 * @param String $url     请求的地址
 * @param Array  $header  自定义的header数据
 * @param Array  $content POST的数据
 * @return String
 */
function tocurl($url, $header, $content){
    $ch = curl_init();
    if(substr($url,0,5)=='https'){
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, true);  // 从证书中检查SSL加密算法是否存在
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($content));
    $response = curl_exec($ch);
    $error=curl_error($ch);
    //var_dump($error);
    if($error){
        die($error);
    }
    $header = curl_getinfo($ch);

    curl_close($ch);
    $data = array('header' => $header,'body' => $response);
    return $data;
}

上述是完成的代码;

这里面有几个主要注意的地方

1.要在你自己的应用里添加ip白名单;否则无法响应

2.出现错误了,多翻阅错误码和返回的提示,很有帮助

3.不懂了可以联系我

原文地址:https://www.cnblogs.com/ailingfei/p/9272822.html