更新记录

1.0.0(2026-08-28)

1.0.0(2026-08-28)

  • 首次发布。
  • iOS:Apple Speech 本机音频文件识别。
  • Android:内置 sherpa-onnx 英文 Zipformer 模型,支持常见系统可解码音频格式。
  • HarmonyOS:Core Speech Kit 端侧 PCM/WAV 文件识别。
  • 提供统一能力检测、错误码、超时和资源释放 API。

平台兼容性

uni-app(4.61)

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

uni-app x(4.61)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - -

其他

多语言 暗黑模式 宽屏模式
×

cw-local-speech

面向 uni-appuni-app x 的 UTS 端侧语音转文字插件。公共 API 在三端一致,音频不会由插件上传到业务服务器。

平台实现

平台 原生引擎 语种 输入格式 重要限制
iOS 13+ SFSpeechRecognizer 设备本机资源支持的语种 wav、m4a、mp3、caf 强制本机识别;需系统已安装对应语种资源
Android 5.0+ sherpa-onnx Zipformer 20M 英文 wav、mp3、m4a、aac、16k 单声道 PCM 当前仅 arm64-v8a;首次使用会解包约 45MB 模型
HarmonyOS 5.0/API 12+ Core Speech Kit zh-CN,含中文语境英文 16kHz、单声道、16-bit little-endian PCM/WAV 仅标准系统真机,不支持模拟器;文件会按实时速度送入系统引擎

跨三端录音时,建议统一生成 16kHz、单声道、16-bit PCM WAV,避免平台格式差异。

安装

把整个 cw-local-speech 目录放到项目的 uni_modules 下:

你的项目/
└── uni_modules/
    └── cw-local-speech/

Android 端包含 AAR 和原生库,需要重新制作自定义基座或正式打包。iOS 的 Info.plist 权限文案会由 UTS 插件合并。HarmonyOS 需 HBuilderX 4.61+ 和可用的 DevEco Studio/HarmonyOS SDK。

使用

import {
  getLocalSpeechCapability,
  recognizeAudioFile,
  releaseLocalSpeech
} from '@/uni_modules/cw-local-speech'

const capability = getLocalSpeechCapability()
console.log('本机能力', capability)

recognizeAudioFile({
  path: audioPath,
  // iOS/Android 默认 en-US;HarmonyOS 默认 zh-CN。
  // 跨端业务建议根据 capability.platform 显式传入。
  locale: capability.platform == 'harmony' ? 'zh-CN' : 'en-US',
  timeoutMs: 120000,
  success: (result) => {
    console.log('识别文本', result.text)
  },
  fail: (error) => {
    console.error(error.errCode, error.errMsg, error.nativeCode)
  },
  complete: () => {
    console.log('识别结束')
  }
})

// 页面不再使用识别时可释放 Android 常驻模型;iOS/HarmonyOS 为安全空操作。
releaseLocalSpeech()

uni-app x.uvue 页面也可以导入类型:

import {
  recognizeAudioFile,
  SpeechRecognizeOptions
} from '@/uni_modules/cw-local-speech'

const options = {
  path: audioPath,
  locale: 'en-US',
  success: (result) => console.log(result.text),
  fail: (error) => console.error(error.errMsg)
} as SpeechRecognizeOptions

recognizeAudioFile(options)

API

getLocalSpeechCapability(locale?)

同步返回平台、是否支持、可用语种、输入格式、原生引擎和限制。调用识别前应先检查 supported

recognizeAudioFile(options)

识别一个已存在的本地音频文件,只回调一次最终结果。

  • path:必填,绝对路径、file:// 或 uni 本地相对路径。
  • locale:iOS/Android 默认 en-US,HarmonyOS 默认 zh-CN
  • timeoutMs:默认 120000。Android 是软超时:回调按时失败,但底层正在执行的本地推理只能在本轮完成后释放。
  • numThreads:Android 专用,1-4,默认 2。
  • sampleRate/channels/sampleBits:HarmonyOS 原始 .pcm 描述,必须分别为 16000/1/16;WAV 从文件头读取。

releaseLocalSpeech()

释放 Android 常驻 sherpa-onnx 模型。不要在识别过程中调用。

错误码

错误码 含义
9011001 参数无效
9011002 文件不存在
9011003 语音识别权限被拒绝
9011004 语种不支持
9011005 音频格式不支持
9011006 端侧识别能力不可用
9011007 引擎忙
9011008 超时
9011009 原生识别失败
9011010 当前设备/平台不支持

上架与隐私说明

  • 插件没有网络请求,也不申请 Android 网络权限。
  • iOS 使用系统 Speech 权限,且明确设置 requiresOnDeviceRecognition=true
  • HarmonyOS 的 ohos.permission.MICROPHONE 来自 Core Speech Kit 官方集成要求;本插件当前只读取调用方指定的音频文件,不主动开启麦克风。
  • Android AAR 中包含 sherpa-onnx、ONNX Runtime 和英文模型。发布前请同时保留 LICENSETHIRD_PARTY_NOTICES.md

真机验收建议

  1. 各准备一段 5-10 秒的 16kHz 单声道 PCM WAV。
  2. 开启飞行模式后分别识别,确认没有网络依赖。
  3. iOS 分别测试已下载/未下载语种资源;Android 测试首次模型解包;HarmonyOS 必须使用标准系统真机。
  4. 验证成功、文件不存在、语种不支持、超时四条回调路径都只执行一次 complete

隐私、权限声明

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

iOS:NSSpeechRecognitionUsageDescription(语音识别权限)。 HarmonyOS:ohos.permission.MICROPHONE(Core Speech Kit 官方要求)。 Android:音频文件识别不申请麦克风和网络权限。

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

插件不采集用户数据,不向任何服务器发送音频或识别结果。iOS 使用 Apple Speech 本机识别;Android 使用插件内置 sherpa-onnx 模型;HarmonyOS 使用系统 Core Speech Kit 端侧能力。音频仅在调用期间于设备本地处理。

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

无。本插件不包含广告,也未接入广告 SDK。

暂无用户评论。