VUE+SPRINGBOOT从0-1打造前后端-前后台系统-语音评测

语音评测技术作为人工智能领域的重要应用之一,在教育、语言学习等领域发挥着越来越重要的作用。本文将详细介绍如何基于WebSocket协议和讯飞开放平台实现一个实时语音评测系统,该系统能够对用户朗读的中英文内容进行实时评测并给出评分反馈。
系统架构概述
整个语音评测系统采用前后端分离的架构设计:
-
前端部分:基于Vue.js框架和Element UI组件库实现用户界面
-
通信层:使用WebSocket协议与讯飞语音评测服务建立实时连接
-
评测服务:依托讯飞开放平台的语音评测API实现核心评测功能
系统工作流程如下:
-
用户在前端选择评测题型并输入/获取评测文本
-
前端通过WebSocket与讯飞服务建立连接
-
用户开始朗读,系统实时采集音频数据
-
音频数据通过WebSocket发送到评测服务
-
服务返回评测结果并在前端展示
关键技术实现
1. 前端界面设计
系统使用Element UI组件库构建了直观的用户界面,主要分为三个部分:
<template>
<div class="Evaluate-container">
<!-- 评测题型列表 -->
<div>
<el-row :gutter="10" style="border-bottom: 1px dashed grey">
<!-- 各种题型卡片 -->
</el-row>
</div>
<!-- 合成文本区域 -->
<div>
<el-input type="textarea" v-model="iseContent" rows="15"></el-input>
</div>
<!-- 操作按钮 -->
<el-button type="primary" @click="recordEvaluate">录音评测</el-button>
<el-button type="danger" @click="stopScore">停止打分</el-button>
</div>
</template>
题型选择区采用卡片式布局,每种题型包含:
-
图标标识
-
题型名称
-
适用语言和人群标签
-
单选按钮
2. 音频采集与处理
系统使用recorder.js库实现浏览器端的音频采集:
// 初始化录音工具
let recorder = new Recorder("../../recorder")
recorder.onStart = () => {
console.log("开始录音了")
}
recorder.onStop = () => {
console.log("结束录音了")
}
// 帧录音回调
recorder.onFrameRecorded = ({isLastFrame, frameBuffer}) => {
if (!isLastFrame && wsFlag) {
// 发送中间帧数据
const params = {
"business": {
"cmd": "auw",
"aus": 1,
"aue": "raw"
},
"data": {
"status": 1,
"data": toBase64(frameBuffer),
"data_type": 1,
"encoding": "raw"
}
}
wsTask.send(JSON.stringify(params))
} else {
// 发送结束帧
const params = {
"business": {
"cmd": "auw",
"aus": 4,
"aue": "raw"
},
"data": {
"status": 2,
"data": ""
}
}
wsTask.send(JSON.stringify(params))
}
}
音频参数配置:
-
采样率:16000Hz
-
帧大小:1280字节
-
编码格式:原始PCM(raw)
3. WebSocket通信实现
系统与讯飞语音评测服务的通信基于WebSocket协议,主要流程包括:
-
建立连接:获取鉴权URL并创建WebSocket连接
async wsInit() {
let _this = this;
let reqeustUrl = await _this.getWebSocketUrl()
wsTask = new WebSocket(reqeustUrl);
wsTask.onopen = function() {
// 发送第一帧数据
let params = {
"common": { "app_id": atob(_this.user.appid) },
"business": {
"rst": "entirety",
"ise_unite": "1",
"category": _this.category,
"ent": _this.ent,
"text": _this.utf8bom + _this.iseContent
},
"data": { "status": 0, "data": "" }
}
wsTask.send(JSON.stringify(params))
// 开始录音
recorder.start({ sampleRate: 16000, frameSize: 1280 });
}
}
-
鉴权处理:使用HMAC-SHA256算法生成签名
getWebSocketUrl() {
return new Promise((resolve, reject) => {
var url = this.URL;
var host = "ise-api.xfyun.cn";
var apiKeyName = "api_key";
var date = new Date().toGMTString();
var algorithm = "hmac-sha256";
var headers = "host date request-line";
var signatureOrigin = `host: ${host}\ndate: ${date}\nGET /v2/open-ise HTTP/1.1`;
var signatureSha = CryptoJS.HmacSHA256(signatureOrigin, atob(this.user.apisecret));
var signature = CryptoJS.enc.Base64.stringify(signatureSha);
var authorizationOrigin = `${apiKeyName}="${atob(this.user.apikey)}", algorithm="${algorithm}", headers="${headers}", signature="${signature}"`;
var authorization = base64.encode(authorizationOrigin);
url = `${url}?authorization=${authorization}&date=${encodeURI(date)}&host=${host}`;
resolve(url);
});
}
-
消息处理:接收评测结果并解析
wsTask.onmessage = function(message) {
let resJson = JSON.parse(message.data);
if (resJson.data.status == 2) {
let res = base64.decode(resJson.data.data)
_this.iseContent = res
wsTask.close();
wsFlag = false
}
}
4. 多题型支持
系统支持多种评测题型,通过watch监听题型变化并自动填充示例文本:
watch: {
radio(newVal, oldVal) {
let tempArray = newVal.split("+")
this.ent = tempArray[0]
this.category = tempArray[1]
switch(newVal) {
case "cn_vip+read_syllable":
this.iseContent = "国"
break
case "cn_vip+read_word":
this.iseContent = "中国"
break
// 其他题型处理...
}
}
}
支持的题型包括:
-
中文:单字、词语、句子、篇章评测
-
英文:单词、句子、篇章、选择、复述、自由评测等
系统特色与优化
-
实时性优化:
-
采用WebSocket协议实现低延迟通信
-
音频数据分帧传输,减少等待时间
-
前端实时显示评测结果
-
-
多题型适配:
-
统一接口支持多种评测模式
-
自动根据题型填充示例文本
-
支持中英文不同评分标准
-
-
安全性保障:
-
使用HMAC-SHA256进行API鉴权
-
敏感信息(API Key)进行Base64编码处理
-
通信数据加密传输
-
-
用户体验优化:
-
响应式界面设计
-
操作流程简洁明了
-
实时反馈和错误提示
-
实现效果展示
系统实现了以下核心功能:
-
多种语音评测题型选择
-
实时音频采集与传输
-
评测结果实时返回
-
中英文双语支持
-
不同年龄段适配
操作流程:
-
用户选择评测题型
-
系统自动填充示例文本
-
点击"录音评测"开始朗读
-
系统实时传输音频数据
-
评测完成显示结果
总结与展望
本文详细介绍了一个基于WebSocket的实时语音评测系统的设计与实现。系统充分利用现代Web技术(Vue.js、WebSocket)和讯飞开放平台的语音评测能力,实现了高效、稳定的语音评测功能。
未来可改进方向:
-
增加更多语种支持
-
实现更详细的发音问题分析
-
加入历史记录和对比功能
-
开发移动端适配版本
-
增加AI辅助练习功能
该系统可作为在线教育平台的核心模块,为语言学习者提供实时、准确的发音反馈,具有广阔的应用前景。
更多推荐
所有评论(0)