zoukankan      html  css  js  c++  java
  • 以语音评测的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);
    }
    

    此文已由腾讯云+社区在各渠道发布

    获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

  • 相关阅读:
    HackerRank savita-and-friends
    HackerRank training-the-army
    51Nod 1378 夹克老爷的愤怒
    51Nod 1380 夹克老爷的逢三抽一
    Codeforces 566 D. Restructuring Company
    BZOJ 2822: [AHOI2012]树屋阶梯
    Codeforces Gym 101138 G. LCM-er
    51Nod 1250 排列与交换
    BZOJ 1511: [POI2006]OKR-Periods of Words
    BZOJ 1355: [Baltic2009]Radio Transmission
  • 原文地址:https://www.cnblogs.com/qcloud1001/p/10303119.html
Copyright © 2011-2022 走看看