更新记录
1.0.0(2026-01-22)
- 首个版本发布
- 支持 Android、iOS、鸿蒙三端
- 实现腾讯云口语评测核心功能
- 实时录音评测
- 音量实时监测
- VAD 静音检测
- 完整的评测结果回调
- 提供统一的三端 API 接口
- 支持中英文评测
- 支持单词/句子/段落/自由说四种评测模式
平台兼容性
uni-app(4.72)
| Vue2 | Vue3 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | iOS插件版本 | 鸿蒙 | 鸿蒙插件版本 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | √ | 1.0.0 | √ | 1.0.0 | 4.4 | 1.0.0 | 12 | 1.0.0 | 12 | 1.0.0 |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|
| - | - | - | - | - | - | - | - | - | - | - |
腾讯云口语评测 UTS 插件 (hl-qcloud-uts)
UTS环境兼容性
| uni-app | uni-app x |
|---|---|
| √ | √ |
插件简介
本插件封装了腾讯云口语评测 SDK(QCloudSOE),支持 Android、iOS、鸿蒙三端,提供以下功能:
- 实时评测模式:边录音边评测
- 文件评测模式:使用本地 PCM 音频文件进行评测
- 支持中文/英文评测
- 支持单词/句子/段落/自由说多种评测模式
- 支持静音检测(VAD)
- 支持音量实时回调
- 完整的评测结果回调
- 统一的三端接口
平台支持
| Android | iOS | 鸿蒙 |
|---|---|---|
| √ (minSdk 21) | √ (iOS 12.0+) | √ (API 12+) |
使用准备
1. 获取腾讯云密钥
在使用前,需要在 腾讯云控制台 获取:
- AppID
- SecretID
- SecretKey
2. 开通口语评测服务
在腾讯云控制台开通口语评测服务。
使用说明
导入插件
import {
enableDebugLog,
onLogCallback,
createSoeController,
stopOralEvaluation,
cancelOralEvaluation,
release
} from '@/uni_modules/hl-qcloud-uts'
基本使用示例(三端通用)
// 1. 开启调试日志(可选)
enableDebugLog()
// 2. 配置日志回调(可选)
onLogCallback((level, tag, message) => {
console.log(`[${level}] ${tag}: ${message}`)
})
// 3. 配置评测参数
const config = {
appId: 1393187574, // 腾讯云 AppID
secretId: 'your-secret-id',
secretKey: 'your-secret-key',
token: '', // 可选,临时token
// API 参数
apiParams: {
serverEngineType: '16k_en', // '16k_zh'中文 / '16k_en'英文
evalMode: 1, // 0-单词 1-句子 2-段落 3-自由说
refText: 'Hello', // 评测文本
scoreCoeff: 1.0, // 评价苛刻指数 [1.0-4.0]
sentenceInfoEnabled: 1, // 0-不输出 1-输出断句中间结果
textMode: 0 // 可选,0-普通文本 1-音素结构文本
},
// VAD(静音检测)配置
enableVAD: true, // 是否开启静音检测
vadInterval: 3000, // 静音检测时长(ms)
vadDBThreshold: 20, // 静音检测音量阈值(0-120)
stopOnVadDetected: true, // 检测到静音是否停止
// 其他配置
connectTimeout: 3000 // WebSocket 连接超时(ms)
}
// 4. 创建控制器
const controller = createSoeController(config)
// 5. 设置回调
controller.onMessage((message) => {
console.log('评测消息:', message)
})
controller.onFinish((result) => {
console.log('评测完成:', result)
console.log('建议评分:', result.suggestedScore)
console.log('准确度:', result.pronAccuracy)
console.log('流利度:', result.pronFluency)
console.log('完整度:', result.pronCompletion)
})
controller.onError((error) => {
console.error('评测错误:', error.response)
})
controller.onVad((hasVoice) => {
if (!hasVoice) {
console.log('检测到静音')
// 可以自动停止评测
controller.stop()
}
})
controller.onVolumeDb((volume) => {
console.log('当前音量:', volume)
})
controller.onStartRecord(() => {
console.log('开始录音')
})
controller.onStopRecord(() => {
console.log('停止录音')
})
// 6. 开始评测
controller.start()
// 7. 停止评测(向服务器发送结束信息,等待服务器返回最终结果)
// controller.stop()
// 8. 取消评测(立即停止评测)
// controller.cancel()
// 9. 释放资源(页面销毁时调用)
// controller.dispose()
全局方法
// 停止当前评测(全局)
stopOralEvaluation()
// 取消当前评测(全局)
cancelOralEvaluation()
// 释放所有资源(全局)
release()
文件评测模式
// 使用本地音频文件进行评测(需要三端原生实现支持)
const fileConfig = {
...config,
useCustomAudioSource: true, // 使用自定义音频源
recordAudioData: base64AudioData // Base64 编码的 PCM 数据
}
const controller = createSoeController(fileConfig)
controller.start()
完整示例(带界面交互)
<template>
<view class="content">
<view class="section">
<text class="title">腾讯云口语评测</text>
</view>
<view class="section">
<input v-model="refText" placeholder="请输入评测文本" class="input" />
</view>
<view class="section">
<button @tap="startEvaluation" :disabled="isEvaluating">开始评测</button>
<button @tap="stopEvaluation" :disabled="!isEvaluating">停止评测</button>
</view>
<view class="section">
<text>音量: {{ volume }}</text>
<progress :percent="volumePercent" stroke-width="8" />
</view>
<view class="section">
<text class="result-title">评测结果:</text>
<text class="result-text">{{ resultText }}</text>
</view>
</view>
</template>
<script>
import { enableDebugLog, onLogCallback, createSoeController } from '@/uni_modules/hl-qcloud-uts'
export default {
data() {
return {
refText: 'Hello',
isEvaluating: false,
volume: 0,
resultText: '暂无结果',
controller: null
}
},
computed: {
volumePercent() {
return Math.round(this.volume / 120 * 100)
}
},
onLoad() {
// 开启调试日志
enableDebugLog()
// 设置日志回调
onLogCallback((level, tag, message) => {
console.log(`[${level}] ${tag}: ${message}`)
})
},
methods: {
startEvaluation() {
this.isEvaluating = true
this.resultText = '评测中...'
const config = {
appId: 1393187574,
secretId: 'your-secret-id',
secretKey: 'your-secret-key',
apiParams: {
serverEngineType: '16k_en',
evalMode: 1,
refText: this.refText,
scoreCoeff: 1.0,
sentenceInfoEnabled: 1
},
enableVAD: true,
vadInterval: 3000,
vadDBThreshold: 20,
stopOnVadDetected: true
}
this.controller = createSoeController(config)
this.controller.onFinish((result) => {
this.isEvaluating = false
this.resultText = `建议评分: ${result.suggestedScore}\n` +
`准确度: ${result.pronAccuracy}\n` +
`流利度: ${result.pronFluency}\n` +
`完整度: ${result.pronCompletion}`
})
this.controller.onError((error) => {
this.isEvaluating = false
this.resultText = `评测出错: ${error.response}`
})
this.controller.onVad((hasVoice) => {
if (!hasVoice) {
this.controller.stop()
}
})
this.controller.onVolumeDb((volume) => {
this.volume = volume
})
this.controller.start()
},
stopEvaluation() {
this.controller?.stop()
}
},
onUnload() {
this.controller?.dispose()
}
}
</script>
<style>
.content {
padding: 20px;
}
.section {
margin-bottom: 20px;
}
.title {
font-size: 18px;
font-weight: bold;
}
.input {
border: 1px solid #ccc;
padding: 10px;
border-radius: 4px;
}
.result-title {
font-weight: bold;
margin-bottom: 10px;
}
.result-text {
white-space: pre-line;
}
</style>
API 参数说明
SoeConfig 配置项
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appId | number | 是 | 腾讯云 AppID |
| secretId | string | 是 | SecretID |
| secretKey | string | 是 | SecretKey |
| token | string | 否 | 临时 Token |
| apiParams | SoeApiParams | 是 | API 参数 |
| enableVAD | boolean | 否 | 是否开启静音检测,默认true |
| vadInterval | number | 否 | 静音检测时间间隔(ms),默认3000 |
| vadDBThreshold | number | 否 | 静音检测阈值(0-120),默认20 |
| stopOnVadDetected | boolean | 否 | 检测到静音是否停止,默认true |
| useCustomAudioSource | boolean | 否 | 是否使用自定义音频源 |
| callbackAudioData | boolean | 否 | 是否回调音频数据 |
| recordAudioData | string | 否 | 录音评测模式的音频数据(Base64) |
| connectTimeout | number | 否 | 网络超时(ms),默认3000 |
SoeApiParams API 参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| serverEngineType | string | 是 | 引擎类型: "16k_zh"(中文) / "16k_en"(英文) |
| evalMode | number | 是 | 评测模式: 0-单词 1-句子 2-段落 3-自由说 |
| refText | string | 是 | 被评估语音对应的文本 |
| scoreCoeff | number | 是 | 评价苛刻指数 [1.0-4.0] |
| sentenceInfoEnabled | number | 是 | 断句中间结果: 0-不输出 1-输出 |
| textMode | number | 否 | 文本模式: 0-普通文本 1-音素结构文本 |
| keyword | string | 否 | 关键词 |
ISoeController 控制器接口
| 方法 | 参数 | 说明 |
|---|---|---|
| start() | - | 开始评测 |
| stop() | - | 停止评测(等待服务器返回结果) |
| cancel() | - | 取消评测(立即停止) |
| dispose() | - | 释放资源 |
| isEvaluating() | - | 是否正在评测 |
| onMessage(callback) | (message: string) => void | 评测消息回调 |
| onFinish(callback) | (result: SoeEvaluationResult) => void | 评测完成回调 |
| onError(callback) | (error: SoeErrorResult) => void | 评测错误回调 |
| onVad(callback) | (hasVoice: boolean) => void | 静音检测回调 |
| onVolumeDb(callback) | (volume: number) => void | 音量回调 |
| onStartRecord(callback) | () => void | 开始录音回调 |
| onStopRecord(callback) | () => void | 停止录音回调 |
| onAudioData(callback) | (data: string, length: number) => void | 音频数据回调 |
SoeEvaluationResult 评测结果
| 字段 | 类型 | 说明 |
|---|---|---|
| sessionId | string | 会话 ID |
| requestId | string | 请求 ID |
| status | string | 评测状态 |
| pronAccuracy | number | 发音准确度 (0-100) |
| pronFluency | number | 发音流利度 (0-1) |
| pronCompletion | number | 发音完整度 (0-1) |
| suggestedScore | number | 建议评分 (0-100) |
| words | SoeWord[] | null | 单词评测结果 |
| sentenceInfoSet | SoeSentenceInfo[] | null | 句子信息 |
| rawResponse | string | 原始响应数据 |
错误码
| 错误码 | 说明 |
|---|---|
| -1 | 未知错误 |
| -100 | AudioRecord初始化失败 |
| -101 | AudioRecord启动失败 |
| -102 | 重复启动口语评测 |
| -103 | 录音线程启动失败 |
| -104 | 数据源为空 |
| -105 | 口语评测请求为空 |
| -106 | Websocket网络异常 |
| -107 | 取消评测 |
注意事项
-
权限要求:
- Android:需要录音权限(RECORD_AUDIO)和网络权限(INTERNET),插件会自动申请
- iOS:需要在 Info.plist 中配置 NSMicrophoneUsageDescription
- 鸿蒙:需要麦克风权限(ohos.permission.MICROPHONE),插件会自动请求
-
音频格式:评测音频必须为 16kHz 采样率的 PCM 格式。
-
安全提示:建议在生产环境中使用临时 Token 而非直接使用 SecretKey,避免密钥泄露。
-
资源释放:页面销毁时请调用
controller.dispose()或release()释放资源。 -
调试日志:开发阶段建议调用
enableDebugLog()开启日志,便于排查问题。 -
三端一致性:本插件提供了统一的三端接口,代码可以在 Android、iOS、鸿蒙三端通用。
-
静音检测:开启 VAD 后,检测到静音会触发
onVad回调,如果stopOnVadDetected为 true,将自动停止评测。 -
鸿蒙平台特别说明:
- 首次运行时会弹出权限请求对话框
- 需要在主应用的
entry/src/main/resources/base/element/string.json中添加:{ "name": "permission_microphone_reason", "value": "用于语音评测录音功能" }

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 273
赞赏 2
下载 13546098
赞赏 1850
赞赏
京公网安备:11010802035340号