失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 阿里云+tp5.1 实现语音合成(文字转音频)

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

时间:2020-09-30 05:00:01

相关推荐

阿里云+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'), //你的阿里云accessKeyIdconfig('aliyun.accessKeySecret') //你的阿里云accessKeySecret)->regionId("cn-shanghai")->asDefaultClient();try {$response = AlibabaCloud::nlsCloudMeta()->v0518()->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();}}

控制器代码:

<?phpnamespace app\index\controller;use app\index\model\Index as I;class Index extends Base{public function index(){$data = (new I())->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--/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;}}

视图:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body><audio src="{$file}" controls="controls"></audio></body></html>

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

如果觉得《阿里云+tp5.1 实现语音合成(文字转音频)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。