更新记录
1.0.0(2026-10-31)
- 首个版本:腾讯云语音识别 UTS 插件
- 一句话识别:支持音频文件 / 网络 URL / assets 音频 / SDK 内置录音器 / MediaRecorder 录音五种入口
- 录音文件识别极速版:支持本地文件、assets 音频、现场录制 PCM 识别
- 实时语音识别:集成 2.0 版 SDK(asr-realtime-sentence-release.aar,okhttp 4.2.2), 结果走 onRawResponse 解析 sentences.sentence_list,支持中间态/稳态句、说话人分离(speaker_id)、 音量与分贝回调、静音检测、状态查询(realtimeRecognizeState)、录音落盘与 pcm 转 wav
- 统一 requestPermissions 权限申请入口
平台兼容性
uni-app(4.72)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-vue插件版本 | app-nvue | app-nvue插件版本 | Android | Android插件版本 | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.0 | √ | 1.0.0 | × | × | √ | 1.0.0 | √ | 1.0.0 | 5.0 | 1.0.0 | × | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | - | × | × |
uni-app x(4.72)
| Chrome | Safari | Android | Android插件版本 | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|
| × | × | 5.0 | 1.0.0 | × | × | × |
插件介绍
zy-tencent-asr 是腾讯云语音识别的 UTS 原生插件(Android),集成腾讯云官方三个 SDK:
| SDK | 能力 | 依赖 aar |
|---|---|---|
| asr-one-sentence | 一句话识别(≤60 秒短音频,同步返回文本) | asr-one-sentence-release.aar |
| asr-file-recognize | 录音文件识别极速版(整段录音同步返回) | asr-file-recognize-release.aar |
| asr-realtime | 实时语音识别 2.0(WebSocket 流式,说话人分离) | asr-realtime-sentence-release.aar |
引入
import * as asr from '@/uni_modules/zy-tencent-asr'
权限
插件已声明 INTERNET / ACCESS_NETWORK_STATE / RECORD_AUDIO / MODIFY_AUDIO_SETTINGS,
运行时录音权限请调用:
asr.requestPermissions({
success: (res) => console.log(res.granted, res.deniedPermissions),
fail: (err) => console.log(err.errCode, err.errMsg)
})
不传 permissions 时只申请录音权限。
错误码
| errCode | 说明 |
|---|---|
| 9020001 | 参数错误 |
| 9020002 | 无法获取当前应用环境 |
| 9020003 | 未初始化 |
| 9020004 | 初始化失败 |
| 9020005 | 文件不存在或读取失败 |
| 9020006 | 识别失败 / SDK 运行期错误 |
| 9020007 | 未授予录音权限 |
| 9020008 | 当前状态不支持该操作 |
| 9020009 | 网络异常或超时 |
失败回调对象遵循 UniError:{ errCode, errMsg, errSubject, data, cause }。
一句话识别
// 1. 初始化
asr.oneSentenceRecognizeInit({ appId, secretId, secretKey, token })
asr.oneSentenceRecognizeInitStatus({ success: (res) => console.log(res.status) })
// 2. 注册识别监听(持续事件流)
asr.oneSentenceRecognizeListener({
success: (ev) => {
// ev.type: listenerSuccess | startRecord | stopRecord | recognizeResult | updateVolume
// ev.result 为识别文本,ev.volumn 为音量
},
fail: (err) => {}
})
// 3. 识别
asr.oneSentenceRecognize({ path: '/sdcard/a.wav', engSerViceType: '16k_zh' }) // 本地文件
asr.oneSentenceRecognize({ url: 'https://xxx/a.wav' }) // 网络音频
asr.oneSentenceRecognize({ assetFile: 'test.mp3', voiceFormat: 'mp3' }) // assets 音频
// 3.1 SDK 内置录音器(自带 AEC/降噪)
asr.recognizeWithRecorder({ engSerViceType: '16k_zh', convertNumMode: 1 })
asr.stopRecognizeWithRecorder({}) // 停止并开始识别
// 3.2 MediaRecorder 录音(m4a)
asr.startMediaRecorder({ filename: 'demo.m4a' })
asr.stopMediaRecorder({ voiceFormat: 'm4a' })
// 4. 释放
asr.oneSentenceRelease({})
参数说明(oneSentenceRecognize / stopMediaRecorder 通用):
path / url / assetFile 三选一;filterDirty、filterModal、filterPunc、convertNumMode、
engSerViceType、hotwordId、voiceFormat、reinforceHotword 均可选。
录音文件识别极速版
asr.fileFlashRecognizeInit({ appId, secretId, secretKey, token })
asr.fileFlashRecognizeInitStatus({})
asr.fileFlashRecognizeListener({
success: (ev) => {
// ev.type: listenerSuccess | recognizeResult(ev.result 为腾讯云返回的原文 JSON)
}
})
asr.fileFlashRecognize({ path: '/sdcard/a.wav', engineModelType: '16k_zh' })
asr.fileFlashRecognize({ assetFile: 'a.mp3', engineModelType: '16k_zh', voiceFormat: 'mp3' })
// 现场录 PCM 再识别
asr.startFileFlashRecognizeRecord({ sampleRate: 16000, channel: 'CHANNEL_IN_MONO' })
asr.stopFileFlashRecognizeRecognizeRecord({ engineModelType: '16k_zh', voiceFormat: 'pcm' })
asr.fileFlashRecognizeRelease({})
极速识别参数:engineModelType、speakerDiarization、firstChannelOnly、wordInfo、
voiceFormat、connectTimeout、readTimeout、reinforceHotword、sentenceMaxLength、
filterDirty/filterModal/filterPunc/convertNumMode。
实时语音识别 2.0
使用腾讯云 实时语音识别 2.0 SDK(asr-realtime-sentence-release.aar v2.0.1,依赖 okhttp 4.2.2),
支持说话人分离(speaker_id)、WebSocket 原始回包与状态机查询。
2.0 版与标准版(
asr-realtime-standard-release.aar)是同模块的两个渠道产物,包含同名类与同名libqcloud_asr_realtime.so,同一 App 内不可共存 —— 本插件只集成 2.0 版。
// appId 必须为数字
asr.realtimeRecognizeInit({ appId: 1250000000, secretId, secretKey, token, projectId: 0 })
asr.realtimeRecognizeInitStatus({})
asr.realtimeRecognizeState({}) // → { state: 'idle|connecting|recognizing|stopping', canStart, needCancel }
asr.startRealtimeRecognizeRecord({
audioRecognizeRequest: {
engineModelType: '16k_zh_en_2.0', // 或 '16k_zh_en_speaker_2.0'(说话人分离)
sampleRate: 16000,
channel: 'CHANNEL_IN_MONO', // 或 CHANNEL_IN_STEREO
aecEnable: true,
filterDirty: 0, filterModal: 0, filterPunc: 0, convertNumMode: 1,
needVad: 1, // 语音超过 1 分钟必须开启
hotwordId: '', customizationId: '', wordInfo: 0, reinforceHotword: 0,
noiseThreshold: 0, maxSpeakTime: 0,
isAudioRecordDataSource: false, // true 用 SDK 内置 AudioRecord 数据源
saveAudio: false, // true 时通过 onNextAudioData 回调音频流
isPlaySound: false, assetFile: '' // 边播边录(回声测试)
},
audioRecognizeConfiguration: {
sliceTime: 40, // 40~5000,20 的整倍数
silentDetectTimeOut: true,
silentDetectTimeOutAutoStop: false,
audioFlowSilenceTimeOut: 5000,
minVolumeCallbackTime: 80,
isCompress: true,
stopFinalTimeoutMs: 5000 // stop 后等待 final 的超时
},
saveFileName: 'rt_123456', // 传了就落盘 pcm(应用私有目录 audio_cache)
success: (ev) => {
// ev.type = listenerSuccess
// ev.type = onAudioRecognizeResult
// resultType = 'onRawResponse'(每帧 WebSocket 原始回包,最常用)
// ev.result 当前完整文本(稳态 + 中间态)
// ev.definiteText 仅稳态句子(sentence_type=1),可直接落库
// ev.sentenceType 0 中间态 / 1 稳态
// ev.speakerId -1 未知(需 16k_zh_en_speaker_2.0 引擎)
// ev.sentenceId / ev.startTime / ev.endTime / ev.code / ev.message
// ev.sentencesJson 本帧 sentence_list 原文;ev.rawResponse 整帧原文
// resultType = 'onSuccess'(识别结束,result/definiteText 为最终文本,voiceId)
// resultType = 'onFailure'(clientException / clientErrorCode / serverException / response)
// ev.type = onAudioRecognizeState
// resultType = onStartRecord / onStopRecord(recordPath)/ onVoiceDb(voiceDb)/
// onVoiceVolume(已废弃)/ onSilentDetectTimeOut
},
fail: (err) => {}
})
asr.stopRealtimeRecognizeRecord({}) // 正常结束,等待最终结果
asr.cancelAudioRecognize({}) // 立即取消
asr.pcm2wav({ pcmPath, success: (res) => console.log(res.path) })
asr.release({})
句子累积规则与官方 Demo 一致:以 sentence_id 为主键,稳态(sentence_type=1)覆盖写入、
中间态(0)暂存;result = 稳态 + 当前中间态,definiteText = 仅稳态。
注意事项
- 必须打自定义基座:UTS 插件改动后需要重新制作自定义基座才能生效。
- appId 类型:一句话识别 / 极速文件识别的
appId为字符串;实时识别的appId为数字。 - 录音权限:实时识别与现场录音前必须先拿到
RECORD_AUDIO,否则回调 9020007。 - 落盘目录:录音、pcm 均写入应用私有外部目录(
Android/data/<pkg>/files/...),无需存储权限。 - 监听是持续事件流:
*Listener与startRealtimeRecognizeRecord的success会被多次回调, 不要在回调里做一次性清理逻辑。 - 临时密钥:使用子账号临时密钥时传
token,过期需重新 init。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 62
赞赏 0
下载 12730669
赞赏 1959
赞赏
京公网安备:11010802035340号