更新记录

1.0.0(2026-08-12)

新版本,男声的模型小,速度快。女生的模型大,速度稍慢。当前接入两套离线 VITS 模型: vits-piper-zh_CN-chaowen-medium-int8 voiceId: "0",Chaowen 中文男声,模型文件为 zh_CN-chaowen-medium.onnx。

vits-melo-tts-zh_en voiceId: "1",Melo 中英双语女声,模型文件为 model.onnx。


平台兼容性

uni-app(4.0)

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

yzj-sherpa-onnx

Android 普通话离线 TTS UTS 插件,基于 sherpa-onnx 1.13.4 与 VITS 模型。

import { initTts, speakTts, stopTts } from '@/uni_modules/yzj-sherpa-onnx'

await initTts({ language: 'zh-CN', speechRate: 1, volume: 1 })
await speakTts({ text: '你好,这是本地离线语音合成。' })
await stopTts()

voiceId 用于选择模型音色:0 为 Chaowen 男声,1 为 Melo 中英女声。切换音色前需要调用 initTts({ voiceId }),同一音色重复初始化会直接复用已加载模型。speechRate 支持 0.52.0

基础用法

<script>
import {
  initTts,
  offTtsEvent,
  onTtsEvent,
  speakTts,
  stopTts
} from '@/uni_modules/yzj-sherpa-onnx'

export default {
  data() {
    return {
      ttsListenerId: null
    }
  },
  async onLoad() {
    this.ttsListenerId = onTtsEvent((event) => {
      console.log('TTS 事件:', event.type, event.utteranceId, event.errMsg)
    })

    const result = await initTts({
      language: 'zh-CN',
      voiceId: '0',
      speechRate: 1,
      volume: 1
    })
    if (!result.ok) {
      uni.showToast({ title: result.errMsg, icon: 'none' })
    }
  },
  onUnload() {
    if (this.ttsListenerId != null) {
      offTtsEvent(this.ttsListenerId)
      this.ttsListenerId = null
    }
  },
  methods: {
    async speak() {
      const result = await speakTts({
        text: '收款成功,感谢您的惠顾。',
        queueMode: 'flush',
        voiceId: '0',
        speechRate: 1,
        volume: 1
      })
      if (!result.ok) {
        uni.showToast({ title: result.errMsg, icon: 'none' })
      }
    },
    async stop() {
      await stopTts()
    }
  }
}
</script>

queueMode: 'flush' 会中断当前播报并立即播放新文本;需要排队播报时传入 'add'。切换到女声时,先调用 initTts({ voiceId: '1' }),待其成功后再调用 speakTts()

播报性能与标点

插件在初始化完成后会在后台执行一次短文本预热,首次点击播报无需再承担模型首次推理的初始化开销。播报使用 sherpa-onnx 流式回调,将首个音频块直接写入 AudioTrack,无需等待整句合成完成。

为避免句号、问号等造成过长的句间静音,播报文本中的中英文逗号、句号、问号、感叹号、分号和冒号会统一转换为中文逗号。该处理保留短暂停顿,但不会像句末标点一样产生较长停顿。原始文本不会被修改。

音频播放使用系统最小缓冲的 3 倍,并按设备 CPU 核心数自动使用最多 4 个推理线程,以优先保证长句的连续播放。实际首音延迟和停顿仍会受到设备性能、模型体积及文本内容影响。

模型不随 APK 打包,部署路径和文件清单见 MODEL.md。模型或任一必要文件缺失时,initTts() 返回 9031010

隐私、权限声明

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

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

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