移動端快速接入語音播報

最近在忙一個小程序藍牙秤的項目,開發環境爲php+小程序,上傳物料的時候須要用到語音播報(即將文字轉換爲語音),因而開始研究,試了幾個,最終使用騰訊AI的API來完成這個功能。官網上(http://ai.qq.com/)也有相應教程,大體分爲這幾個步驟php

1.建立應用

填寫應用的相關信息,勾選所需的AI技術服務,完成應用的建立,最多能夠爲應用開放全部的接口權限。json

2.獲取密鑰

在應用建立完畢後,您即可在應用詳情中查看到此應用的接入憑證,主要爲AppID、AppKey。每一個應用惟一標示,互不相同,這兩個值須要保存好,後期要用到哦小程序

3.生成簽名

應用在調用平臺AI技術接口以前,首先須要獲取接口鑑權簽名。api

4.啓動開發

一切就緒,即可以開發數組


上邊呢,是大致的步驟,具體知道有這幾步就能夠了,下面舉個實例,更容易讓你們理解,其實這個接口的做用就是將文字轉換爲語音,而後返回文字的語音數據app

5.後臺配置

  1. 請求的參數

clipboard.png

模型編碼curl

女生 0
女生純英文1
男生 2
喜道公子 6ui

語速編碼this

0.6倍速 -2
0.8倍速 -1
正常速度 0
1.2倍速 1
1.5倍速 2編碼

下面使用PHP實現該HTTP API調用(text即爲待合成的語音)

public function actionBluetoothScaleVoice()
     {
        $data  = Yii::$app->request->get('data');
        $appkey = 'Ejxghuuuuuuuuu';
        $params = array(
            'app_id'     => '11060809832473294',
            'text'       => $data,
            'model_type' => '0',
            'speed'      => '0',
            'time_stamp' => strval(time()),
            'nonce_str'  => strval(rand()),
            'sign'       => '',
        );
        $params['sign'] = $this->getReqSign($params, $appkey);
        // 執行API調用
        $url = 'https://api.ai.qq.com/fcgi-bin/aai/aai_tta';
        $response =$this->doHttpPost($url, $params);
        return $response;
    }
        
       //獲取簽名
       
      public function getReqSign($params /* 關聯數組 */, $appkey /* 字符串*/)
        {
            // 1. 字典升序排序
            ksort($params);
            // 2. 拼按URL鍵值對
            $str = '';
            foreach ($params as $key => $value)
            {
                if ($value !== '')
                {
                    $str .= $key . '=' . urlencode($value) . '&';
                }
            }
            // 3. 拼接app_key
            $str .= 'app_key=' . $appkey;

            // 4. MD5運算+轉換大寫,獲得請求籤名
            $sign = strtoupper(md5($str));
            return $sign;
        }
        
        //執行請求
        public function doHttpPost($url, $params)
    {
        $curl = curl_init();

        $response = false;
        do
        {
            // 1. 設置HTTP URL (API地址)
            curl_setopt($curl, CURLOPT_URL, $url);

            // 2. 設置HTTP HEADER (表單POST)
            $head = array(
                'Content-Type: application/x-www-form-urlencoded'
            );
            curl_setopt($curl, CURLOPT_HTTPHEADER, $head);

            // 3. 設置HTTP BODY (URL鍵值對)
            $body = http_build_query($params);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $body);

            // 4. 調用API,獲取響應結果
            curl_setopt($curl, CURLOPT_HEADER, false);
            curl_setopt($curl, CURLOPT_NOBODY, false);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $response = curl_exec($curl);
            if ($response === false)
            {
                $response = false;
                break;
            }

            $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
            if ($code != 200)
            {
                $response = false;
                break;
            }
        } while (0);

        curl_close($curl);
        return $response;
    }

2.響應參數

clipboard.png

後臺寫好了,前臺該怎麼展現呢,這裏以小程序爲例:

6.前臺處理

1.在頁面中添加audio標籤

<audio src="" id="myAudio" ></audio>

2.添加請求

wx.request({
      url: 'https://xxxx.com',
      data: { data: "待合成的語音數據"},
      method: "get",
      header: {
        'content-type': 'application/json' // 默認值
      },
      dataType: "json",
      success: function (res) {
        let myAudio = wx.createAudioContext('myAudio');
        myAudio.setSrc("data:audio/mp3;base64," + res.data.data.voice);
        myAudio.play();
      }
    })

大體就這麼多,若是有不清楚的,或者有更好辦法的歡迎留言,共同進步

相關文章
相關標籤/搜索