以語音評測的PC端demo代碼爲例,講解口語評測如何實現

本文由雲+社區發表

作者:騰訊智慧教育

img

概述

騰訊雲智聆口語評測(英文版)(Smart Oral Evaluation-English,SOE-E)是騰訊雲推出的語音評測產品,是基於英語口語類教育培訓場景和騰訊雲的語音處理技術,應用特徵提取、聲學模型和語音識別算法,爲兒童和成人提供高準確度的英語口語發音評測。騰訊雲智聆口語評測(英文版)支持單詞和句子模式的評測,多維度反饋口語表現,可廣泛應用於英語口語類教學應用中。

本 SDK 爲智聆口語測評(英文版)的 Web 版本,封裝了對智聆口語測評(英文版)網絡 API 的調用及本地音頻文件處理,並提供簡單的錄音功能,使用者可以專注於從業務切入,方便簡潔地進行二次開發。

本文檔只對 Web SDK 進行描述,詳細的網絡 API 說明請參見 API 文檔

使用說明

SDK引入

只需要在您的 Web 頁面中添加如下代碼即可:

html
<script src="https://imgcache.qq.com/open/qcloud/soe/TencentSOE-0.0.1.js"></script>

創建對象

new TencentSOE

參數 類型 說明 是否必填 默認值
InitUrl String 初始化接口地址
TransUrl String 評分接口地址
WorkMode Integer 上傳方式:語音輸入模式,0流式分片,1非流式一次性評估 0
EvalMode Integer 評估模式,0:詞模式, 1:句子模式 0
ScoreCoeff Float 評價苛刻指數,取值爲1.0 - 4.0範圍內的浮點數 用於平滑不同年齡段的分數,1.0爲小年齡段,4.0爲最高年齡段 3.5
SoeAppId String 業務應用ID,與賬號應用APPID無關,是用來方便客戶管理服務的參數
StorageMode Integer 音頻存儲模式,0:不存儲,1:存儲到公共對象存儲, 輸出結果爲該會話最後一個分片TransmitOralProcess 返回結果 AudioUrl 字段。
success function 創建成功回調
error function 創建失敗回調

用戶需自行替換後臺接口地址,nodejs版本可參考此SDKlet recorder = new TencentSOE({ InitUrl: ‘http://127.0.0.1:3000/cgi/init’, TransUrl: ‘http://127.0.0.1:3000/cgi/trans’, success() { // TODO }, error(err) { console.log(err); } });

方法

初始化

/**
 * 調用初始化接口,設置測評文本
 * @param {
 *   success: function() {} // 成功回調
 *   error: function() {} // 失敗回調
 * }
 */
recorder.init({
  RefText: 'about',
  success() {
    recorder.start();
  },
  error(err) {
    console.log(err);
  }
});

開始錄音

/**
 * 開始錄音
 * @param {
 *   error: function() {} // 錄音過程出現錯誤時回調,選填
 * }
 */
recorder.start({
  error(err) {
    console.log(err);
  }
});

停止錄音

/**
 * 停止錄音,返回測評結果
 * @param {
 *   success: function() {} // 成功回調
 *   error: function() {} // 失敗回調
 * }
 */
recorder.stop({
  success(res) {
    // 獲取blob對象,創建audio進行回放
    let audio = document.createElement('audio');
    audio.setAttribute('controls', '');
    let blobUrl = URL.createObjectURL(res.blob);
    document.body.appendChild(audio);
   	
    // 輸出測評得分
    console.log(res.PronAccuracy)
  },
  error(err) {
    console.log(err);
  }
});

重置參數

/**
 * 重置參數,用於修改請求參數
 * @param {Object} params
 */
recorder.reset({
  WorkMode: 1
});

在線Demo

https://soe.cloud.tencent.com

錯誤碼

code 錯誤說明
10000 參數格式錯誤
10001 當前瀏覽器不支持錄音功能
10002 未開啓麥克風訪問權限
10003 未提供發音評估初始化接口
10004 未提供發音數據傳輸接口接口
10005 未提供測評文本
10020 接口錯誤

Tip: 非本地環境必須使用https協議

極簡示例

創建html, 引入TencentSOE SDK,代碼如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <script src="//imgcache.qq.com/open/qcloud/soe/TencentSOE-0.0.1.js"></script>
</head>
<body>
  <input type="text" value="about" id="word">
  <button id="start">開始錄音</button>
  <button id="stop">結束錄音</button>
   <!-- 顯示當前狀態 -->
  <span id="status"></span>
  <!-- 顯示測評結果 -->
  <div id="result"></div>
</body>
</html>

編寫錄音代碼:開始錄音、結束錄音、展示結果,代碼如下

let recorder = new TencentSOE({
  InitUrl: 'http://127.0.0.1:3000/cgi/init',
  TransUrl: 'http://127.0.0.1:3000/cgi/trans',
  success(res) {
    console.log('創建成功');
  },
  error(err) {
    console.log('創建失敗');
  },
});
startBtn.onclick = function () {
  result.innerHTML = '';
  status.textContent = '初始化中';
  recorder.init({
    RefText: word.value,
    success(res) {
      status.textContent = '錄音轉碼中...';
      recorder.start();
    },
    error(err) {
      console.log('err', err);
    }
  });
};
stopBtn.onclick = function () {
  recorder.stop({
    success(res) {
      status.textContent = '已結束';
      createAudioLinkFromBlob(res, 'wav');
    },
    error(err) {
      console.log('err', err);
    }
  });
};

// 創建音頻、下載鏈接
function createAudioLinkFromBlob(res, type) {
  let audio = document.createElement('audio');
  let alink = document.createElement('a');
  let score = document.createElement('span');
  let blobUrl = URL.createObjectURL(res.blob);
  alink.download = 'demo.' + type;
  alink.textContent = 'demo.' + type;
  alink.href = blobUrl;
  audio.src = blobUrl;
  audio.setAttribute('controls', '');
  score.textContent = '分數:' + res.PronAccuracy;

  let container = document.createElement('div');
  container.appendChild(audio);
  container.appendChild(alink);
  container.appendChild(score);
  result.appendChild(container);
}

此文已由騰訊雲+社區在各渠道發佈

獲取更多新鮮技術乾貨,可以關注我們騰訊雲技術社區-雲加社區官方號及知乎機構號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章