简单讲解PHP如何对接百度语音合成接口

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的时候,需要注意控制响应数据的大小,避免过大的数据流量对服务器产生影响。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签