更新记录

1.2.0(2026-11-09) 下载此版本

适配 安卓和鸿蒙系统


平台兼容性

uni-app(5.0)

Vue2 Vue2插件版本 Vue3 Vue3插件版本 Chrome Safari app-vue app-nvue Android Android插件版本 iOS 鸿蒙 鸿蒙插件版本
√ 1.2.0 √ 1.2.0 - - - - 5.0 1.2.0 - √ 1.2.0
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

azp-ali-speech

阿里云智能语音交互(NUI SDK)UTS 插件 —— 实时语音识别(SpeechTranscriber)。

  • Android:基于 V2.7.4-039-20260909_Android_MIT_TLS(NUI SDK 2.7.4 Android MIT 版,nuisdk-release.aar 已内置), 原生 AudioRecord 采音 + SDK 流式识别一体。
  • HarmonyOS NEXT:基于 V1.5.016.napi.003.010(neonui.har 已内置,arm64-v8a,API 12+), 系统 AudioCapturer 推流送数(updateAudio)+ SDK 流式识别。

适用于「长按说话 → 松手出文本」的语音输入场景。两端 API、事件序列、错误码完全一致。

能力

  • 实时语音识别:句内中间结果(partial)、定句结果(sentenceEnd)、最终累积文本(completed)
  • 录音音量回调(0~1 自适应归一化,驱动界面波形)
  • 录音权限检查与运行时申请(RECORD_AUDIO)
  • token 会话级热更新(支持服务端 token 轮换,无需重新初始化)
  • 停止识别后等待服务端补齐最后一句,超时以当前文本兜底

环境要求

  • HBuilderX 3.6.8+(UTS 插件需自定义基座运行/打包,标准基座不含本插件;鸿蒙端需 HBuilderX 4.31+)
  • Android minSdkVersion 21
  • App 已声明 RECORD_AUDIO 权限(本项目 src/manifest.json 已配置)
  • NUI SDK 支持 ABI:arm64-v8a / armeabi-v7a / x86_64
  • HarmonyOS NEXT:API 12+,仅 arm64-v8a;权限(ohos.permission.MICROPHONE、ohos.permission.INTERNET) 由插件 module.json5 自动声明,宿主 manifest 无需重复配置

API

方法 说明
onSpeechEvent(listener \| null) 注册/注销识别事件监听器(全局单例)
initSpeechSdk(options) 初始化 SDK(幂等),传入 appkey/token/url
startTranscribe(options) 开始一次识别会话(含权限申请、录音、建连)
stopTranscribe(options) 停止并等待最终文本(可配超时兜底)
cancelTranscribe() 取消当前会话(立即丢弃后续回调)
releaseSpeechSdk() 释放 SDK
getSdkVersion() 同步获取 NUI SDK 版本号

事件(onSpeechEvent)

type 触发时机 字段说明
recording 录音器开启(SDK AudioState.STATE_OPEN) -
started 服务端确认任务启动 message 为 task_id(鸿蒙端 SDK 无对应事件,该值为空串,建连鉴权失败会随后以 error 事件上报)
partial 句内中间结果 text = 已定句 + 当前句累积
sentenceEnd 定句(该句最终文本) text = 全部已定句文本
completed 识别完成(或停止超时兜底) text = 最终累积文本;超时时 message = "stop timeout"
error 识别异常中断 code = NUI 原生错误码,message = 错误描述
volume 录音音量(约 80ms 节流) volume = 0~1

错误码(AliSpeechFail.errCode)

错误码 含义
9020001 SDK 未初始化
9020002 参数无效(appkey/token 为空)
9020003 已存在进行中的识别任务
9020004 未获得录音权限
9020005 SDK 调用失败(errMsg 附带详情)
9020006 录音器初始化失败

使用示例

// #ifdef APP-PLUS
import {
  onSpeechEvent, initSpeechSdk, startTranscribe,
  stopTranscribe, cancelTranscribe, releaseSpeechSdk,
} from '@/uni_modules/azp-ali-speech'
// #endif

// 1. 注册事件监听(一次即可)
onSpeechEvent((event) => {
  switch (event.type) {
    case 'recording': /* 开始计时/波形动画 */ break
    case 'partial':   /* 实时显示 event.text */ break
    case 'sentenceEnd': /* 定句文本 */ break
    case 'completed': /* 最终文本(停止后) */ break
    case 'error':     /* event.code / event.message */ break
    case 'volume':    /* 波形强度 event.volume */ break
  }
})

// 2. 初始化(token 由业务后端下发,客户端不内置密钥)
const token = await getAliyunAsrTokenApi()
initSpeechSdk({
  appkey: '你的NLS项目appkey',
  token,
  debug: false,
  success: (res) => console.log('SDK版本', res.version),
  fail: (err) => console.error(err.errMsg),
})

// 3. 长按开始识别
startTranscribe({
  token, // 可选:token 轮换时传入最新值
  maxSentenceSilence: 800,
  success: (res) => console.log('任务已启动', res.taskId),
  fail: (err) => console.error(err.errMsg),
})

// 4. 松手停止,等待最终文本
const res = await new Promise((resolve) => {
  stopTranscribe({
    timeoutMs: 8000,
    success: resolve,
    fail: (err) => resolve({ text: '', timeout: true }),
  })
})
// res.text 为最终识别文本;res.timeout 为 true 表示超时兜底

// 5. 取消(上滑取消/切后台/来电等场景,立即结束不等待结果)
cancelTranscribe()

// 6. 释放(长时间不用语音时;下次使用需重新 initSpeechSdk)
releaseSpeechSdk()

提示:stopTranscribe 未在识别中时为幂等调用,直接以已有文本成功返回。

实现说明

  • 送数模式(Android):回调送数(audio_update_manually=false),SDK 经 onNuiNeedAudioData 从 AudioRecord 拉取 PCM(16k/16bit/单声道),与官方示例一致,无需自建录音线程
  • 送数模式(HarmonyOS NEXT):推流送数(updateAudio),系统 AudioCapturer(readData 回调) 产出 PCM 推给 SDK;会话开始即预创建录音器,AudioState.STATE_OPEN 后启动,每次会话结束 释放重建(规避 DevEco 低版本 stop 后直接 start 不触发回调的问题)
  • 纯云端模式:service_mode = ModeFullCloud,无需拷贝本地资源与 workspace(SDK ≥ 2.6.2; 鸿蒙端初始化仍需 workspace/debug_path,插件内以应用 filesDir 填入)
  • 线程模型(Android):initialize/setParams/startDialog/stopDialog/cancelDialog/release 统一在 单线程执行器中串行执行,避免阻塞 UI 线程
  • 事件线程:NUI 回调(SDK 内部线程)直接派发到 JS 监听器,业务侧无需关心线程
  • 音量归一化:NUI RMS 量纲与设备相关,采用峰值跟踪自适应缩放(缓慢衰减), 保证波形在安静/嘈杂环境下均有合理动态范围

目录结构

utssdk/
├── interface.uts          # 跨平台 API 类型定义
├── unierror.uts           # 错误码与错误对象
├── app-android/
│   ├── index.uts          # Android 实现(NUI SDK + AudioRecord)
│   ├── config.json        # minSdkVersion 21
│   └── libs/
│       └── nuisdk-release.aar          # 阿里云 NUI SDK 2.7.4 (MIT, MinSizeRel 版 19MB)
├── app-ios/index.uts      # 占位(调用即失败,待接入 iOS SDK)
└── app-harmony/
    ├── index.uts          # 鸿蒙实现(NUI SDK + AudioCapturer 推流)
    ├── config.json        # 依赖 neonui.har
    ├── module.json5       # 声明 MICROPHONE / INTERNET 权限
    ├── resources/         # 权限申请理由字符串
    └── libs/
        └── neonui.har     # 阿里云 NUI SDK 1.5.016 (HarmonyOS NEXT, arm64-v8a)

平台兼容性

平台 状态
Android(uni-app vue / uni-app x) 支持
HarmonyOS NEXT(uni-app vue / uni-app x) 支持(API 12+,arm64-v8a)
iOS 占位(调用返回 9020005)
Web / 小程序 不适用(请在 APP-PLUS 条件编译中使用)

参考文档

隐私、权限声明

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

Android: - android.permission.RECORD_AUDIO(运行时动态申请,用于采集语音) - android.permission.INTERNET(访问阿里云语音服务) HarmonyOS NEXT: - ohos.permission.MICROPHONE(插件 module.json5 已声明,运行时动态申请) - ohos.permission.INTERNET

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

1. 采集内容:仅用户主动触发录音期间的麦克风音频(16kHz/16bit/单声道 PCM)。不采集通讯录、位置、设备标识(IMEI/AndroidID/MAC/OAID)、已安装应用列表、传感器与文件数据。 2. 发送地址:阿里云智能语音交互 NLS 网关 wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1(业务方可通过 initSpeechSdk({url}) 替换为自有或其他地域网关)。除该地址外插件不发起任何网络请求。 3. 数据用途:音频流实时上传仅用于语音转文字;识别结果(文本、定句、task_id、音量)只通过回调/事件返回给宿主 App,插件不上传、不落库、不用于画像与推荐。 4. 随请求上报参数:appkey/token 由业务方服务端下发,插件不内置任何密钥;device_id 为插件在内存中生成的随机串(形如 azp-ali-speech-<时间戳>-<随机数>,不含真实设备标识),仅用于阿里云服务端排查问题,业务方也可自行传入。 5. 本地存储:默认不写入任何文件。仅当业务方显式传 debug: true 时,阿里云 SDK 会将调试日志与原始音频(save_wav)写入应用私有缓存目录(Android 外部缓存目录/azp-ali-speech-debug,HarmonyOS 应用 filesDir)用于问题定位,关闭 debug 即不产生。 6. 音频数据仅在识别会话期间存在于内存与传输通道,插件不做持久化保存,也不与第三方共享。

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

无

许可协议

MIT协议

暂无用户评论。