阿里云+tp5.1 实现语音合成(文字转音频)

 阿里云+tp5.1  实现语音合成(文字转音频)大请忽略!!!

效果视频链接:http://images.junely.vip/textToAudio.mp4


 

前提条件

  • 已准备项目appkey,详情请参见创建项目。

  • 已获取Access Token,详情请参见获取Token。

    获取token前提条件

  •  已获取AccessKey ID和AccessKey Secret,详情请参见开通服务。

      获取Token代码:

     /**
     * 获取Token
     * @return int|mixed|string
     * @throws ClientException
     */
    public function getToken(){
        $cacheToken = cache('AccessToken');
        if ($cacheToken) return $cacheToken;
        AlibabaCloud::accessKeyClient(
            config('aliyun.accessKeyId'), //你的阿里云accessKeyId
            config('aliyun.accessKeySecret') //你的阿里云accessKeySecret
        )
            ->regionId("cn-shanghai")
            ->asDefaultClient();
        try {
            $response = AlibabaCloud::nlsCloudMeta()
                ->v20180518()
                ->createToken()
                ->request();
            $token = $response["Token"];
            if($token) {
                cache('AccessToken',$response["Token"]['Id'],3600);    //存缓存
                return $response["Token"]['Id'];  //Token在此
            }
            return 0;
        } catch (ClientException $exception) {
            // 获取错误消息
            return $exception->getErrorMessage();
        } catch (ServerException $exception) {
            // 获取错误消息
            return $exception->getErrorMessage();
        }
    }

控制器代码:

index();
        $this->assign('file', $data);
        return $this->fetch();
    }
}

模型代码:

public function index(){

        $text = input('post.text');
        $appkey = config('aliyun.appKey'); //项目AppKey
        $token = $this->getToken();
        $audioSaveFile = date('YmdHis').".wav"; //文件名
        $format = "wav";    
        $sampleRate = 16000;
        $res = $this->processPOSTRequest($appkey, $token, $text, $audioSaveFile, $format, $sampleRate);
        return ($res);
    }

    public function processPOSTRequest($appkey, $token, $text, $audioSaveFile, $format, $sampleRate)
    {
        $url = "nls-gateway.cn-shanghai.aliyuncs.com/stream/v1/tts";
        /**
         * 请求参数,以JSON格式字符串填入HTTPS POST请求的Body中。
         */
        $taskArr = array(
            "appkey" => $appkey,
            "token" => $token,
            "text" => $text,
            "format" => $format,
            "sample_rate" => $sampleRate,
            // voice 发音人,可选,默认是xiaoyun。
             "voice" => "Aida",
//             volume 音量,范围是0~100,可选,默认50。
             "volume" => 50,
            // speech_rate 语速,范围是-500~500,可选,默认是0。
             "speech_rate" => -350,
            // pitch_rate 语调,范围是-500~500,可选,默认是0。
             "pitch_rate" => 50
        );
        /**
         * 数组转json,中文不转义
         */
        $body = json_encode($taskArr,JSON_UNESCAPED_UNICODE);   
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        /**
         * 设置HTTPS POST URL。
         */
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_POST, TRUE);
        /**
         * 设置HTTPS POST请求头部。
         * */
        $httpHeaders = array(
            "Content-Type: application/json"
        );
        curl_setopt($curl, CURLOPT_HTTPHEADER, $httpHeaders);
        /**
         * 设置HTTPS POST请求体。
         */
        curl_setopt($curl, CURLOPT_POSTFIELDS, $body);
        /**
         * 设置返回的响应包含HTTPS头部信息。
         */
        curl_setopt($curl, CURLOPT_HEADER, TRUE);
        /**
         * 发送HTTPS POST请求。
         */
        $response = curl_exec($curl);
        if ($response == FALSE) {
            curl_close($curl);
            return 'curl_exec failed!';
        }

        /**
         * 处理服务端返回的响应。
         */
        $headerSize = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
        $headers = substr($response, 0, $headerSize);
        $bodyContent = substr($response, $headerSize);
        curl_close($curl);

        if (stripos($headers, "Content-Type: audio/mpeg") != FALSE || stripos($headers, "Content-Type:audio/mpeg") != FALSE) {
//            $res = file_put_contents('audioFile/'.$audioSaveFile, $bodyContent); //写入文件输出到本地
            //转成base64格式
            $base64String = 'data:' . 'audio/mpeg' . ';base64,' . chunk_split(base64_encode($bodyContent));
            return $base64String;
        }
    }

视图:




    
    Title





(文笔不好,请勿介意)~

你可能感兴趣的:(php,php,阿里云,thinkphp,后端,restful)