PHP如何对接百度语音合成接口?

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请求、请求签名、处理响应数据等内容。用户可以根据自己的实际需求,在此基础上进行二次开发,实现更加丰富的语音合成应用。

后端开发标签