PHP使用阿里云(语音合成)实现文字转语音“TTS“

时间:2024-04-06 11:52:26

在做前,我发现阿里云竟然没有PHP文字转语音的SDK包,有点尴尬啊,没办法我选择了RESTful API 2.0的方式请求;

1:第一步:打开阿里云-->产品分类-->人工智能-->语音合成-->申请开通,可以先试用一下;

2:第二步:阿里云控制台-->有你刚刚购买的语音合成,PHP使用阿里云(语音合成)实现文字转语音“TTS“,一开始你需要创建一个项目,当前我已经创建一个“文字转语音”。并会生成项目Appkey;,PHP使用阿里云(语音合成)实现文字转语音“TTS“,在拿到你的AccessKey ID和Access Key Secret,这三个值等会调取接口时需要;

3:第三步,在这里面需要生成token,所以我们可以在阿里云里找到生成token的sdk包PHP使用阿里云(语音合成)实现文字转语音“TTS“打开下翻PHP使用阿里云(语音合成)实现文字转语音“TTS“,这里可以点击上面的方法在github中下载源码,也可以使用composer安装SDK包;

 

准备工作做好以后,下面就上代码了;

require __DIR__ . '/vendor/autoload.php';//引入到运行页面中

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;

//使用你的AccessKey ID和Access Key Secret初始化

$aly =  AlibabaCloud::accessKeyClient("你的AccessKey ID", "你的Access Key Secret")
    ->regionId("cn-shanghai")
    ->asDefaultClient();

//获取token等初始化的值
$response = AlibabaCloud::nlsCloudMeta()
    ->v20180518()
    ->createToken()
    ->request();

$url = 'https://nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts';//这个是访问阿里云的接口

$token = $response['Token']['Id'];//获取token值:

目前基本已经完成一半了;下面开始文字转语音了,官方给了2种转的方法,GET和POST

第一种:GET(中文的话需要进行UTF-8转码,在URL编码才可以)

$text = '喜洋洋,美羊羊,懒洋洋,沸羊羊,红太狼,灰太狼';//需要转的文字

$text = mb_convert_encoding($text ,'utf-8');//文字转换成utf-8的形式

$text = urlencode($text);//URL编码数据

下面就开始拼接数据了:

$data = 'appkey=你的Appkey&token='.$token.'&text='.$text';

$get_tts = $url.$data;//已经生成了路径你把路径放到url请求一下就ok了

 

第二种:POST(需要把数据拼接成数组,然后进行json_encode转换一下,在请求接口上添加:Content-Type: application/json)

$text = '喜洋洋,美羊羊,懒洋洋,沸羊羊,红太狼,灰太狼';//转换的文字

$data =['appkey'=>'你的appkey','token'=>$token,'text'=>$text];

$data = json_encode($data);

       $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_HTTPHEADER,
            ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
        $data = curl_exec($ch);
        curl_close($ch);

就ok了;