1. 简介
百度语音是一种非常好用的语音合成工具,用户可以通过API接口将文字转换成语音文件,语音合成服务提供对“即时”、“异步”等多种请求方式的支持。本文将介绍如何使用PHP语言对接百度语音合成接口。
2. 基本请求流程
2.1 申请百度语音合成API接口
在使用百度语音合成API接口之前,需要用户申请API Key和Secret Key,API Key和Secret Key是调用API接口的重要凭证。用户可以在百度开放云平台中的“语音合成”模块中创建应用,申请相应的Key。
创建应用的详细步骤可以参考百度云开发者中心文档。
2.2 发起请求
在使用百度语音合成API接口之前,需要在PHP代码中引入Curl函数库。用户需要构造HTTP请求,向百度语音合成API接口传递相关参数和请求签名进行请求。API接口的请求地址和请求方式变量定义如下:
$url = "http://tsn.baidu.com/text2audio";
$method = "POST";
在构造HTTP请求中,需要传递以下参数:
tex:合成的文本,使用URL(utf-8)编码。最大为2048个中文字。
tok:开放平台获取到的开发者access_key,最长为100个字符。
cuid:用户唯一标识,用来区分用户,建议填写能区分用户的机器MAC地址+应用标识,长度为60以内。
ctp:客户端类型标识,可选值为web、pc、android、ios、wp、mac,默认为web。
lan:语言选择,中文为zh,英文为en。
spd:语速,取值0-9,默认为5中语速。
pit:音调,取值0-9,默认为5中语调。
vol:音量,取值0-15,默认为5中音量。
per:发音人选择,取值0-1,默认为0普通女声。
以上常规参数除了tex以外,均有默认值,用户可以根据需要进行参数的修改,例如将spd修改为7,示例代码如下:
$data = array(
"tex" => urlencode("今天天气不错"),
"tok" => $accessKey,
"cuid" => "123456",
"ctp" => "1",
"lan" => "zh",
"spd" => "7",
"pit" => "5",
"vol" => "5",
"per" => "0"
);
2.3 请求签名
请求签名的作用是保证请求的合法性和数据的完整性,只有包含正确签名的请求才能得到正确的响应。在请求串中需要包含上面提到的前几个请求参数,还需要包含几个固定参数和一个随机字符串(nonce)用于防重放攻击。正确请求签名算法在百度语音合成API接口文档中有详细介绍。
正确的签名算法可以参考百度云开发者中心文档。
2.4 处理响应数据
百度语音合成API接口会返回语音合成后的二进制音频数据,用户需要将此数据写入到文件或输出到浏览器,播放语音。在PHP代码中处理响应数据,可以使用以下代码:
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
// 处理响应数据
header('Content-type: application/octet-stream');
echo $response;
}
// 关闭curl句柄
curl_close($ch);
3. 示例代码
参考以下示例代码,对接百度语音合成API接口:
// 设置accessKey和SecretKey
$accessKey = 'xxx';
$secretKey = 'xxx';
// 设置API URL和请求方式
$url = "http://tsn.baidu.com/text2audio";
$method = "POST";
// 设置请求的文本
$text = "今天天气不错";
// 构造请求数据
$data = array(
"tex" => urlencode($text),
"tok" => $accessKey,
"cuid" => "123456",
"ctp" => "1",
"lan" => "zh",
"spd" => "7",
"pit" => "5",
"vol" => "5",
"per" => "0"
);
// 生成签名
$sign = generateSign($method, $url, $data, $secretKey);
// 向API接口发起请求
$ch = curl_init();
$options = array(
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($data),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => array(
"Content-Type: application/x-www-form-urlencoded; charset=utf-8",
"User-Agent: BCCS_SDK/3.0 (Windows NT 6.1; Win64; x64; rv:58.0) PHP/7.2.21",
"Content-Length: " . strlen(http_build_query($data)),
"x-bce-date: " . gmstrftime('%Y-%m-%dT%H:%M:%SZ', time())
)
);
curl_setopt_array($ch, $options);
// 处理响应数据
$response = curl_exec($ch);
// 输出响应数据
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
} else {
header('Content-type: application/octet-stream');
echo $response;
}
// 关闭curl句柄
curl_close($ch);
// 生成签名
function generateSign($method, $url, $params, $sk)
{
ksort($params);
$queryStr = http_build_query($params);
$rawStr = $method . "\n" . parse_url($url, PHP_URL_HOST) . "\n/text2audio\n" . $queryStr;
$sign = base64_encode(hash_hmac('sha1', $rawStr, $sk, true));
return $sign;
}
4. 总结
本文介绍了如何使用PHP语言对接百度语音合成API接口。通过本文的介绍,用户可以了解到百度语音合成API接口的基本请求流程,包括HTTP请求、请求签名、处理响应数据等内容。用户可以根据自己的实际需求,在此基础上进行二次开发,实现更加丰富的语音合成应用。