更新记录
1.0.0(2026-11-10)
首次发布。基于 HarmonyOS CoreSpeechKit 实现文本转语音(TTS),提供 initTts 预创建引擎、speak 文本播报、stop 停止、isSpeaking 状态查询、release 释放,并支持开始/完成/停止/错误回调。
平台兼容性
uni-app(4.31)
| Vue2 |
Vue3 |
Chrome |
Safari |
app-vue |
app-nvue |
Android |
iOS |
鸿蒙 |
| × |
× |
× |
× |
× |
× |
× |
× |
√ |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| × |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
uni-app x(4.31)
| Chrome |
Safari |
Android |
iOS |
鸿蒙 |
微信小程序 |
| × |
× |
× |
× |
√ |
× |
其他
| 多语言 |
暗黑模式 |
宽屏模式 |
蒸汽模式 |
| × |
× |
× |
√ |
xingxing-tts 文本转语音插件
HarmonyOS 原生 TextToSpeechManager 的 uni-app 版 UTS 插件封装,能力一一对应:
| 原生能力 |
插件 API |
createByCallback() |
initTts() |
speak(text, done) |
speak()(完成回调为 onDone) |
ttsEngine.stop() |
stop() |
| 无 |
isSpeaking()(对应 TextToSpeechEngine.isBusy()) |
| 无 |
release()(对应 TextToSpeechEngine.shutdown()) |
setListener 回调 |
onStart / onDone / onStop / fail |
目录结构
uni_modules/xingxing-tts/
├─ package.json
├─ readme.md
└─ utssdk/
├─ interface.uts # 跨端类型定义
├─ index.uts # 未适配平台兜底实现
└─ app-harmony/
└─ index.uts # UTS 层:参数处理与回调分发,直接调用 CoreSpeechKit
UTS 本身是 ArkTS 的超集,这里直接以 UTS 书写原生实现,避免再拆分 .ets 文件导致跨 .uvue / .app-harmony 编译线时无法解析依赖。
原生 @kit.CoreSpeechKit 的调用统一放在 app-harmony/index.uts 中,UTS 层只负责参数与回调转发。
使用方式
把整个 xingxing-tts 目录拷贝到 uni-app 项目的 uni_modules/ 下即可,通过 uni_modules 方式引入。
1. 预创建引擎(建议放在 App.vue onLaunch)
import { initTts } from '@/uni_modules/xingxing-tts'
initTts({
language: 'zh-CN',
person: 0,
online: 1,
success: () => console.log('TTS 引擎已就绪'),
fail: (err) => console.error(err.errCode, err.errMsg)
})
2. 播报文本
import { speak } from '@/uni_modules/xingxing-tts'
speak({
text: '答对了,太棒了,下一题',
speed: 1,
volume: 2,
pitch: 1,
success: (res) => console.log('下发成功', res.requestId),
onStart: (res) => console.log('开始播报', res.requestId),
onDone: (res) => console.log('播报完成', res.requestId),
onStop: (res) => console.log('播报被停止', res.requestId),
fail: (err) => console.error(err.errCode, err.errMsg)
})
speak 内部会自动创建引擎,即使未调用 initTts 也可直接使用,只是首次播报会有创建引擎的耗时。
3. 停止 / 查询 / 释放
import { stop, isSpeaking, release } from '@/uni_modules/xingxing-tts'
stop({ success: () => console.log('已停止') })
const playing = isSpeaking()
release()
参数说明
| 参数 |
说明 |
默认值 |
text |
播报文本,长度不超过 10000 字符 |
必填 |
requestId |
本次播报唯一标识,同一实例内不可重复 |
${Date.now()} |
language |
语种,zh-CN / en-US |
zh-CN |
person |
音色,中文 0(聆小珊女声)/ 13 / 21 |
0 |
online |
模式,0 在线 1 离线 |
1 |
speed |
语速,0.5~2 |
1 |
volume |
音量,0~15 |
2 |
pitch |
音调,0.5~2 |
1 |
queueMode |
队列模式,0 追加 1 清空后播报 |
0 |
soundChannel |
声道 |
3 |
playType |
播放类型,0 仅合成 1 合成并播报 |
1 |
注意事项
- 离线模式(
online: 1)为本地合成,若使用在线模式(online: 0)需保证应用已声明 ohos.permission.INTERNET 权限,可在 harmony-configs/entry/src/main/module.json5 中补充。
- 同一时刻全设备最多支持创建 3 个 TTS 实例,插件内部保持单例,请勿重复
initTts 之外的手动创建。
shutdown 后单例会被清空,下次调用 speak/initTts 会重新创建引擎。
- 当前仅实现了 HarmonyOS NEXT 端;其他平台走
utssdk/index.uts 兜底,统一 fail 返回 10086001。