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.不懂了可以聯系我


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM