更新记录
1.0.1(2026-09-23)
io优化
平台兼容性
uni-app(4.45)
| Vue2 | Vue2插件版本 | Vue3 | Vue3插件版本 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|---|
| √ | 1.0.1 | √ | 1.0.1 | × | × | √ | √ | 5.0 | 12 | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | × | - | - |
uni-app x(5.0)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| - | - | - | - | - | - |
其他
| 多语言 | 暗黑模式 | 宽屏模式 |
|---|---|---|
| √ | × | × |
yt-tts-plus 文字转语音增强版插件
支持 Android TextToSpeech 和 iOS AVSpeechSynthesizer 的 uni-app UTS 插件。
特性
- ✅ 支持 Android 和 iOS 平台
- ✅ 提供 nvue 组件方式和 API 调用方式
- ✅ 支持多语言(中文、英文、日文、韩文等)
- ✅ 可调节语速、音调
- ✅ 支持暂停、恢复、停止
- ✅ 完整的事件回调
使用方式
方式一:nvue 组件(推荐,支持完整事件回调)
在 .nvue 页面中使用组件方式:
<template>
<view>
<yt-tts
ref="tts"
:defaultLanguage="'zh-CN'"
:rate="1.0"
:pitch="1.0"
@ready="onReady"
@speakstart="onSpeakStart"
@speakend="onSpeakEnd"
@error="onError"
/>
<button @tap="speak">开始朗读</button>
</view>
</template>
<script>
export default {
methods: {
speak() {
const options = {
language: 'zh-CN',
rate: 1.0,
pitch: 1.0
}
this.$refs.tts.speak('你好,欢迎使用 TTS 插件', options)
},
onReady() {
console.log('TTS 准备就绪')
},
onSpeakStart() {
console.log('开始朗读')
},
onSpeakEnd() {
console.log('朗读完成')
},
onError(e) {
console.error('TTS 错误:', e.detail)
}
}
}
</script>
组件属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| defaultLanguage | String | 'zh-CN' | 默认语言 |
| rate | Number | 1.0 | 语速(0.5-2.0) |
| pitch | Number | 1.0 | 音调(0.5-2.0) |
组件方法
通过 ref 调用:
| 方法 | 参数 | 说明 |
|---|---|---|
| speak | (text: string, options?: Object) | 朗读文本 |
| pause | - | 暂停朗读 |
| resume | - | 恢复朗读 |
| stop | - | 停止朗读 |
| setLanguage | (lang: string) | 设置语言 |
| isSpeaking | - | 是否正在朗读 |
| getVoices | - | 获取可用语音列表 |
| setVoice | (voiceId: string) | 设置语音 |
组件事件
| 事件 | 参数 | 说明 |
|---|---|---|
| ready | - | TTS 初始化完成 |
| speakstart | - | 开始朗读 |
| speakend | - | 朗读完成 |
| error | { errMsg: string } | 发生错误 |
| voicesloaded | { voices: Array } | 语音列表加载完成 |
方式二:API 调用(用于 .vue 页面)
在 .vue 页面中使用 API 方式:
<template>
<view>
<button @tap="speak">开始朗读</button>
<button @tap="stop">停止</button>
</view>
</template>
<script>
// #ifdef APP-PLUS
import * as TTS from '@/uni_modules/yt-tts-plus'
// #endif
export default {
methods: {
speak() {
// #ifdef APP-PLUS
const options = {
language: 'zh-CN',
rate: 1.0,
pitch: 1.0
}
TTS.speak('你好,欢迎使用 TTS 插件', options)
// #endif
},
stop() {
// #ifdef APP-PLUS
TTS.stop()
// #endif
}
},
beforeUnmount() {
// #ifdef APP-PLUS
TTS.destroy()
// #endif
}
}
</script>
API 方法
| 方法 | 参数 | 说明 |
|---|---|---|
| createTTS | (options?: TTSOptions) | 创建 TTS 实例(可选) |
| speak | (text: string, options?: Object) | 朗读文本 |
| pause | - | 暂停朗读 |
| resume | - | 恢复朗读 |
| stop | - | 停止朗读 |
| setLanguage | (lang: string) | 设置语言 |
| isSpeaking | - | 是否正在朗读 |
| getVoices | - | 获取可用语音列表 |
| setVoice | (voiceId: string) | 设置语音 |
| destroy | - | 销毁 TTS 实例 |
示例
本项目包含两个完整示例:
- tts-demo.nvue - 组件方式示例(nvue 页面,支持完整事件回调)
- tts-api-demo.vue - API 方式示例(vue 页面)
注意事项
传统 uni-app 项目
- ✅ nvue 页面:使用组件方式
<yt-tts-plus>(推荐,支持完整事件) - ✅ vue 页面:使用 API 方式
import * as TTS from '@/uni_modules/yt-tts-plus' - ⚠️ 条件编译:在
.vue页面中使用 API 时,必须用// #ifdef APP-PLUS包裹 import 和调用代码
uni-app x 项目
- ✅ 所有页面都使用组件方式(推荐)
- ✅ 也可以使用 API 方式
关键点:
utssdk/index.uts使用条件编译// #ifdef来导出对应平台的 API.vue页面通过import * as TTS from '@/uni_modules/yt-tts-plus'导入.nvue页面使用<yt-tts-plus>组件
参数格式说明
options 参数
speak 方法的 options 参数应使用普通 JavaScript 对象,而不是 Map 对象:
// ✅ 正确 - 使用普通对象
const options = {
language: 'zh-CN',
rate: 1.0,
pitch: 1.0
}
TTS.speak('文本内容', options)
// ❌ 错误 - 不要使用 Map
const options = new Map()
options.set('language', 'zh-CN')
参数说明:
| 参数 | 类型 | 范围 | 说明 |
|---|---|---|---|
| language | String | - | 语言代码(如 'zh-CN') |
| rate | Number | 0.5-2.0 | 语速,1.0 为正常速度 |
| pitch | Number | 0.5-2.0 | 音调,1.0 为正常音调 |
常见问题
Q: .vue 页面和 .nvue 页面应该用哪种方式?
A:
- nvue 页面:推荐使用组件方式,支持完整的事件回调(ready、speakstart、speakend、error)
- vue 页面:使用 API 方式,需要用
// #ifdef APP-PLUS包裹
Q: 为什么 API 方式没有事件回调?
A: API 方式是全局单例,适合简单的朗读场景。如果需要完整的事件回调,建议使用 nvue 页面 + 组件方式。
Q: 如何在 .vue 页面中正确导入?
许可
MIT License

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 31
赞赏 1
下载 12634998
赞赏 1950
赞赏
京公网安备:11010802035340号