1. 录入百度语音合成接口的信息
在使用百度语音合成之前,需要先在百度AI开放平台上创建一个应用。创建好应用之后,可以通过获取应用的API Key和Secret Key来开始使用语音合成API。
在百度AI开放平台的文本到语音合成页面,可以找到一些设置。其中包括:语速、音调、发音人、语音格式等等,每一个设置都有其默认值。此外,一些设置可以通过代码修改。比如,设置音量可以通过在请求URL中增加volume参数。这些设置的默认值可以在文本到语音合成页面上找到。
2. 生成请求URL
百度语音合成API通过HTTP协议提供访问。在PHP中,可以使用cURL库来完成发送HTTP请求的操作。代码如下:
$url = 'http://tsn.baidu.com/text2audio'; // API请求地址
$apiKey = '123456789'; // API Key
$secretKey = 'abcdefghijk'; // Secret Key
// 构建HTTP请求参数
$params = array(
'tex' => '欢迎使用百度语音合成API', // 待合成的文本
'tok' => '24.5bf788ac9d9a2f98f930eed6a61c6e86.2592000.1557832603.282335-1234567', // Access Token
'cuid' => 'test_user_id', // 用户标识
'spd' => 3, // 语速,取值0-9,默认为5
'pit' => 5, // 音调,取值0-9,默认为5
'vol' => 10, // 音量,取值0-15,默认为5
'per' => 4, // 发音人,取值0-4,默认为0
'aue' => 3, // 音频格式,取值1:pcm(默认),2:wav,3:mp3,4:amr
'lan' => 'zh', // 语言,默认为中文
);
// 构建必要的HTTP请求头部信息
$header = array(
'Content-Type: application/x-www-form-urlencoded',
);
// 签名认证
$timestamp = time();
$signature = md5($apiKey . $params['tex'] . $timestamp . $secretKey);
$params['sign'] = $signature;
$params['timestamp'] = $timestamp;
// 生成完整的URL请求地址
$url .= '?' . http_build_query($params);
// 使用cURL库发送HTTP请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$output = curl_exec($ch);
curl_close($ch);
2.1 构建请求参数
在代码中,可以看到请求参数使用了一个数组params来保存,并且在发送请求之前需要先进行一些必要的修改。以下是对请求参数的说明:
参数名称 | 含义 | 默认值 |
---|---|---|
tex | 待合成的文本 | 空字符串 |
tok | Access Token | 空字符串 |
cuid | 用户标识 | 空字符串 |
spd | 语速,取值0-9,默认为5 | 5 |
pit | 音调,取值0-9,默认为5 | 5 |
vol | 音量,取值0-15,默认为5 | 5 |
per | 发音人,取值0-4,默认为0 | 0 |
aue | 音频格式,取值1:pcm(默认),2:wav,3:mp3,4:amr | 1 |
lan | 语言,默认为中文 | zh |
2.2 构建HTTP请求头部信息
HTTP请求头部信息是一个字符串数组,每一个字符串都表示HTTP请求头的一个字段。在代码中,只设置了Content-Type字段,表示请求的内容是JSON字符串。其他的请求参数已经在请求URL中以参数形式带了出来,所以不需要在HTTP请求头中设置。
2.3 签名认证
在进行语音合成API调用的时候,需要进行签名认证。签名认证中最重要的是签名算法。在发送请求的时候,需要将API Key、待合成的文本、当前时间戳以及Secret Key四个参数拼接在一起,然后使用MD5算法进行加密得到签名值。代码中使用了PHP的md5函数来完成算法。
2.4 生成完整的URL请求地址
在拼接URL请求地址的时候,需要将请求地址和请求参数进行组合,最后生成完整的URL请求地址。在代码中,使用了PHP的http_build_query函数来将请求参数数组转换成字符串形式,并自动进行URL编码。然后将编码后的请求参数拼接在请求地址的后面,得到完整的URL请求地址。
3. 发送HTTP请求
在完成请求URL的构建之后,就可以使用cURL库来发送HTTP请求,并获取API返回的结果。在代码中,使用curl_init函数来初始化cURL句柄,然后使用curl_setopt函数来设置cURL请求的选项。最后使用curl_exec函数来执行请求操作,并获取API返回的结果。在获取完结果之后,需要使用curl_close函数来关闭cURL句柄。
4. 解析API返回数据
在获取到API返回的结果之后,需要对其进行解析,得到其中的音频数据,并将其保存到一个本地文件中。
// 解析API返回的JSON字符串
$result = json_decode($output);
// 判断API返回的状态码是否为0,如果不为0说明合成失败
if (isset($result->err_no) && $result->err_no != 0) {
echo '语音合成失败:' . $result->err_msg;
} else {
// 将返回的音频数据保存到本地文件中
file_put_contents('audio.mp3', $result->data);
}
在代码中,使用了PHP内置函数json_decode来将API返回的JSON字符串解析成PHP对象。然后判断返回的状态码是否为0,如果不为0,说明语音合成失败,需要输出错误信息。如果状态码为0,表示合成成功,将获取到的音频数据保存到本地文件中。
5. 完整代码示例
$url = 'http://tsn.baidu.com/text2audio'; // API请求地址
$apiKey = '123456789'; // API Key
$secretKey = 'abcdefghijk'; // Secret Key
// 构建HTTP请求参数
$params = array(
'tex' => '欢迎使用百度语音合成API', // 待合成的文本
'tok' => '24.5bf788ac9d9a2f98f930eed6a61c6e86.2592000.1557832603.282335-1234567', // Access Token
'cuid' => 'test_user_id', // 用户标识
'spd' => 3, // 语速,取值0-9,默认为5
'pit' => 5, // 音调,取值0-9,默认为5
'vol' => 10, // 音量,取值0-15,默认为5
'per' => 4, // 发音人,取值0-4,默认为0
'aue' => 3, // 音频格式,取值1:pcm(默认),2:wav,3:mp3,4:amr
'lan' => 'zh', // 语言,默认为中文
);
// 构建必要的HTTP请求头部信息
$header = array(
'Content-Type: application/x-www-form-urlencoded',
);
// 签名认证
$timestamp = time();
$signature = md5($apiKey . $params['tex'] . $timestamp . $secretKey);
$params['sign'] = $signature;
$params['timestamp'] = $timestamp;
// 生成完整的URL请求地址
$url .= '?' . http_build_query($params);
// 使用cURL库发送HTTP请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$output = curl_exec($ch);
curl_close($ch);
// 解析API返回的JSON字符串
$result = json_decode($output);
// 判断API返回的状态码是否为0,如果不为0说明合成失败
if (isset($result->err_no) && $result->err_no != 0) {
echo '语音合成失败:' . $result->err_msg;
} else {
// 将返回的音频数据保存到本地文件中
file_put_contents('audio.mp3', $result->data);
}
6. 总结
本文主要介绍了如何使用PHP对接百度语音合成API。在使用API之前,需要在百度AI开放平台上创建一个应用,并获取API Key和Secret Key。在请求API之前,需要构建HTTP请求URL,并设置一些请求参数和请求头信息。在完成请求操作之后,需要对API返回的数据进行解析,并获取其中的音频数据。最后,将获取到的音频数据保存到一个本地文件中,就完成了对接工作。
此外,还需要注意的是,API返回的音频数据可能比较大,可能会对服务器造成一定的负担。所以,在使用API的时候,需要注意控制响应数据的大小,避免过大的数据流量对服务器产生影响。