科大讯飞在线语音合成

来分享下PHP调用科大讯飞在线语音合成接口生成语音文件

在后台新建应用,添加IP白名单,复制APPID 与 APIKey备用
定义APPID与APPKEY

const APP_ID = 'xxx';                              //APPID
const APP_KEY_TTS = 'xxxxxxx';                     //语音合成APPKEY

语音生成函数

public function voiceTts($content, $output_path)
{
    $param = [
        'auf' => 'audio/L16;rate=16000',        //音频采样率
        'aue' => 'lame',                        //格式
        'voice_name' => 'xiaoyan',              //发音人
        'speed' => '50',                        //语速
        'volume' => '50',                       //音量
        'pitch' => '50',                        //音高
        'engine_type' => 'intp65',              //中文
    ];
    $cur_time = (string)time();
    $x_param = base64_encode(json_encode($param));
    $header_data = [
        'X-Appid:' . self::APP_ID,
        'X-CurTime:' . $cur_time,
        'X-Param:' . $x_param,
        'X-CheckSum:' . md5(self::APP_KEY_TTS . $cur_time . $x_param),
        'Content-Type:application/x-www-form-urlencoded; charset=utf-8'
    ];    //Body
    $body_data = 'text=' . urlencode($content);    //Request
    $url = "http://api.xfyun.cn/v1/service/v1/tts";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_data);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $body_data);
    $result = curl_exec($ch);
    $res_header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $res_header = substr($result, 0, $res_header_size);
    curl_close($ch);
    if (stripos($res_header, 'Content-Type: audio/mpeg') === FALSE) { //合成错误
        return json_decode(substr($result, $res_header_size),true);
    } else {
        file_put_contents($output_path, substr($result, $res_header_size));
        return array('code'=>0);
    }
}

调用

voiceTts("葫芦娃", 'demo.mp3');

 

Leave A Comment

Please be polite. We appreciate that. Your email address will not be published and required fields are marked