更新记录

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 = 仅稳态。

注意事项

  1. 必须打自定义基座:UTS 插件改动后需要重新制作自定义基座才能生效。
  2. appId 类型:一句话识别 / 极速文件识别的 appId 为字符串;实时识别的 appId 为数字。
  3. 录音权限:实时识别与现场录音前必须先拿到 RECORD_AUDIO,否则回调 9020007。
  4. 落盘目录:录音、pcm 均写入应用私有外部目录(Android/data/<pkg>/files/...),无需存储权限。
  5. 监听是持续事件流:*Listener 与 startRealtimeRecognizeRecord 的 success 会被多次回调, 不要在回调里做一次性清理逻辑。
  6. 临时密钥:使用子账号临时密钥时传 token,过期需重新 init。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

RECORD_AUDIO / INTERNET / ACCESS_NETWORK_STATE / MODIFY_AUDIO_SETTINGS

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

录音音频经加密链路上传腾讯云语音识别服务用于在线识别,插件本身不采集其他数据。详情参考 https://cloud.tencent.com/document/product/1093

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。