腾讯云+tp5.1实现语音合成存为mp3文件

准备食材:

1,到腾讯云上注册帐号,认证帐号,选那种认证自己根据自己身条件想办法;

2,腾讯云--》 控制台 --》搜“访问管理” --》腾讯云+tp5.1实现语音合成存为mp3文件  --》新建一个**(这个是调用API的凭证);

3,https://cloud.tencent.com/document/product/1073/34093 可以先打开相关开发档了解个大概;

4,tp5.1在开发的项目,无项目你为什么要做这个语音合成功能,不要问我这个是什么;

5,要用到Composer, 是 PHP 的依赖管理工具,用来下载部署SDK的,如何安装见链https://cloud.tencent.com/document/sdk/PHP

 

开工煮饭了:

1,先说了坑爹货:PHP要是5.6.33或以上版本,然后打开PHP的安装根目录, 然后上这https://cloud.tencent.com/document/sdk/PHP,下载证书放到根目录里,再配置php.ini:

  1. 下载证书文件 cacert.pem,将其保存到 PHP 安装路径下。
  2. 编辑php.ini文件,删除curl.cainfo配置项前的分号注释符(;),值设置为保存的证书文件cacert.pem的绝对路径。
  3. 重启依赖 PHP 的服务。

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

2,本人写这个是对命名空间的概念不清,和TP5也比较水,只是为了工作,所以怎样能实现怎样笨来:

先命令行下切到项目的vendor目录下

腾讯云+tp5.1实现语音合成存为mp3文件

建议*地区的用户设置腾讯云镜像源,在命令行输入:composer config -g repos.packagist composer https://mirrors.tencent.com/composer/

然后添加依赖,在命令行输入:

composer require tencentcloud/tencentcloud-sdk-php

安装好后vendor目录下应该新增了以下

腾讯云+tp5.1实现语音合成存为mp3文件

然后把绿框的都拷下extend目录下,不要问我点解要这样做,因为我tp5没学好

------------------------------------------------------------------------------------------------------------------------------

3,https://cloud.tencent.com/document/product/1073/34093  回到开发档,腾讯还是有点人性的,搞了个代码生成页面你用:

腾讯云+tp5.1实现语音合成存为mp3文件

腾讯云+tp5.1实现语音合成存为mp3文件

然后就是简单的改装工作了,改成自己想要和附加的:我贴一下我的实际应用代码吧:

 

先在文件头加上需要使用的命名空间
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Tts\V20190823\TtsClient;
use TencentCloud\Tts\V20190823\Models\TextToVoiceRequest;

 

//保存活动方法
    public function saveact()
    {
        
        $id = input('post.id','0','intval');
        $one=db('表名')->where('id='.$id.' and gsid='.$this->memberinfo['id'])->find();
        
        $data['title'] = input('post.title','','strip_tags');

        $data['voiceinfo'] = input('post.voiceinfo');
        $data['voicetype'] = input('post.voicetype',1,'intval');


        
        //语音合成
        if(!empty($data['voiceinfo']) && $one['voiceinfo']!=$data['voiceinfo'] ){
            try {
                $cred = new Credential(config("SecretId"), config("SecretKey"));
                $httpProfile = new HttpProfile();
                $httpProfile->setEndpoint("tts.tencentcloudapi.com");
                  
                $clientProfile = new ClientProfile();
                $clientProfile->setHttpProfile($httpProfile);
                $client = new TtsClient($cred, "ap-guangzhou", $clientProfile);
                $vname=md5(time().rand(10000,90000));  //搞个随机字符串api调用时需要到的参数,同时也是mp3文件日后的文件名了
            
                $req = new TextToVoiceRequest();
                
                $params = "{\"Text\":\"".$data['voiceinfo']."\",\"SessionId\":\"".$vname."\",\"ModelType\":1,\"VoiceType\":".$data['voicetype'].",\"Codec\":\"mp3\"}";
                $req->fromJsonString($params);
            
            
                $resp = $client->TextToVoice($req);
                $resp=$resp->toJsonString();
                $resp=json_decode($resp,true);  //到这里已经得到了返回的数据但转成数组了
               

               //以下是保存音频数据保存成mp3文件存在服务器上
                $data['voicepath']=config("voice_path").$vname.".mp3";
                $myfile = fopen(Env::get('ROOT_PATH')."\public".$data['voicepath'], "w") or die("Unable to open file!");
                fwrite($myfile, base64_decode($resp['Audio'])); //base64_decode是因为返回来的音频数据需解码后保存出来的mp3文件才正常
                fclose($myfile);
                
                // echo "生成语音成功!";
                // dump($resp);
                //print_r($resp->toJsonString());
            }
            catch(TencentCloudSDKException $e) {
                echo $e;
            }
        }
        
   
       //.....下面还有一堆自己项目的代码,看也没用,删了算
    }    
    

----------------------------------------------------------------------------------------------

好啦,收工啦,就这样成了

看不看得明看个人悟性,不过也说得好白了,技术好的就不要看了,这是初阶记录写给自己怕自己年纪大了,转头又不会做了。

还在上腾讯云核心的那个SDK文件夹,如果通过composer安不成,自己想办法把SDK的TencentCloud文件夹搞到手放在extend目录下