xinli/纯前端TTS功能使用说明.md
2025-11-26 14:14:19 +08:00

338 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 纯前端 TTS 功能使用说明
## 📋 方案概述
基于浏览器 **Web Speech API** 实现的纯前端文字转语音功能,**无需后端服务**,适合局域网环境使用。
### ✅ 优势
1. **零后端依赖**:完全在浏览器中运行,不需要服务器支持
2. **即开即用**:直接打开 HTML 文件即可使用
3. **跨平台**:支持 Windows、Linux、Mac
4. **响应式设计**:适配桌面和移动设备
5. **功能完整**:支持音量、语速、音调调节
---
## 🎯 使用方式
### 方式一:独立工具(推荐用于测试)
直接打开 `局域网TTS工具.html` 文件:
1. 双击打开 `局域网TTS工具.html`
2. 在文本框中输入要朗读的文字
3. 调整音量、语速、音调参数
4. 点击"开始朗读"按钮
**特点**
- 无需任何配置
- 适合快速测试和演示
- 可以放在局域网服务器上供多人使用
### 方式二Vue 组件集成(用于项目)
在 Vue 项目中使用 `TtsPlayer` 组件:
```vue
<template>
<div>
<!-- 题目内容 -->
<div class="question-content">{{ questionText }}</div>
<!-- TTS 播放器 -->
<TtsPlayer
:text="questionText"
lang="zh-CN"
@start="onTtsStart"
@end="onTtsEnd"
@stop="onTtsStop"
/>
</div>
</template>
<script>
import TtsPlayer from '@/components/Psychology/TtsPlayer.vue'
export default {
components: {
TtsPlayer
},
data() {
return {
questionText: '请根据您的实际情况,选择最符合的选项。'
}
},
methods: {
onTtsStart() {
console.log('开始朗读')
},
onTtsEnd() {
console.log('朗读完成')
},
onTtsStop() {
console.log('停止朗读')
}
}
}
</script>
```
---
## 📦 文件说明
### 1. `局域网TTS工具.html`
**位置**:项目根目录
**用途**:独立的 TTS 工具,可直接在浏览器中打开使用
**功能**
- ✅ 文本输入和朗读
- ✅ 音量、语速、音调调节
- ✅ 预设文本快速填充
- ✅ 响应式设计,支持移动端
### 2. `xinli-ui/src/components/Psychology/TtsPlayer.vue`
**位置**Vue 项目组件目录
**用途**:可复用的 TTS 组件,集成到 Vue 项目中
**Props**
- `text` (String): 要朗读的文本
- `lang` (String): 语言设置,默认 `zh-CN`
**Events**
- `@start`: 开始朗读时触发
- `@end`: 朗读完成时触发
- `@stop`: 停止朗读时触发
- `@error`: 朗读出错时触发
---
## 🔧 在问卷答题页面中集成
### 步骤 1导入组件
`xinli-ui/src/views/psychology/questionnaire/taking.vue` 中:
```vue
<script>
import TtsPlayer from '@/components/Psychology/TtsPlayer.vue'
export default {
components: {
TtsPlayer
},
// ...
}
</script>
```
### 步骤 2添加 TTS 播放器
在题目显示区域添加 TTS 组件:
```vue
<template>
<el-card shadow="never" class="question-card" v-if="currentItem">
<div class="question-number"> {{ currentIndex + 1 }} </div>
<div class="question-content">{{ currentItem.itemContent }}</div>
<!-- 添加 TTS 播放器 -->
<div style="margin: 15px 0;">
<TtsPlayer :text="currentItem.itemContent" />
</div>
<!-- 其他内容... -->
</el-card>
</template>
```
### 步骤 3可选 - 自动朗读
如果需要自动朗读题目,可以在切换题目时触发:
```vue
<script>
export default {
watch: {
currentItem(newItem) {
if (newItem && this.autoRead) {
// 延迟一下,确保组件已渲染
this.$nextTick(() => {
this.$refs.ttsPlayer?.speakText()
})
}
}
}
}
</script>
```
---
## 🌐 浏览器兼容性
### ✅ 完全支持
- **Chrome** 33+(推荐)
- **Edge** 14+
- **Safari** 7+
- **Opera** 20+
### ⚠️ 部分支持
- **Firefox**:需要手动启用 `media.webspeech.synth.enabled`
### ❌ 不支持
- **IE** 11 及以下版本
---
## 🎨 自定义配置
### 修改默认参数
`TtsPlayer.vue` 组件中:
```javascript
data() {
return {
volume: 1.0, // 默认音量0-1
rate: 1.0, // 默认语速0.5-2
pitch: 1.0, // 默认音调0.5-2
}
}
```
### 选择语音
```javascript
// 获取可用语音列表
const voices = this.synth.getVoices()
console.log(voices)
// 选择特定语音
const chineseVoice = voices.find(voice =>
voice.name.includes('Chinese') ||
voice.lang === 'zh-CN'
)
if (chineseVoice) {
this.utterance.voice = chineseVoice
}
```
---
## 📝 使用示例
### 示例 1基本使用
```vue
<TtsPlayer text="欢迎使用AI心理健康测评系统" />
```
### 示例 2监听事件
```vue
<TtsPlayer
:text="questionText"
@start="handleTtsStart"
@end="handleTtsEnd"
/>
```
### 示例 3动态文本
```vue
<TtsPlayer :text="currentQuestion.content" />
```
---
## ⚠️ 注意事项
1. **浏览器限制**
- 某些浏览器需要用户交互后才能播放语音
- 建议在用户点击按钮后触发朗读
2. **语音质量**
- 不同浏览器的语音质量可能不同
- Chrome 的中文语音质量通常较好
3. **网络环境**
- 完全离线可用,不需要网络连接
- 适合局域网环境
4. **性能考虑**
- 长文本建议分段朗读
- 避免同时播放多个语音
---
## 🐛 常见问题
### Q: 为什么没有声音?
**A**: 检查以下几点:
1. 浏览器是否支持 Web Speech API
2. 系统音量是否开启
3. 浏览器是否允许自动播放音频
4. 是否在用户交互后触发(某些浏览器要求)
### Q: 语音质量不好?
**A**:
1. 使用 Chrome 浏览器(语音质量最好)
2. 调整语速和音调参数
3. 检查系统语音设置
### Q: 如何切换语音?
**A**:
```javascript
const voices = speechSynthesis.getVoices()
const voice = voices.find(v => v.name.includes('Microsoft'))
utterance.voice = voice
```
---
## 📚 技术文档
### Web Speech API 参考
- [MDN - SpeechSynthesis](https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesis)
- [MDN - SpeechSynthesisUtterance](https://developer.mozilla.org/zh-CN/docs/Web/API/SpeechSynthesisUtterance)
### API 参数说明
| 参数 | 类型 | 范围 | 说明 |
|------|------|------|------|
| `lang` | String | - | 语言代码,如 `zh-CN` |
| `volume` | Number | 0-1 | 音量大小 |
| `rate` | Number | 0.5-2 | 语速倍数 |
| `pitch` | Number | 0.5-2 | 音调高低 |
| `voice` | SpeechSynthesisVoice | - | 语音对象 |
---
## ✨ 功能特性
- ✅ 纯前端实现,无需后端
- ✅ 支持中文语音合成
- ✅ 可调节音量、语速、音调
- ✅ 响应式设计,支持移动端
- ✅ 预设文本快速填充
- ✅ 事件监听支持
- ✅ 错误处理机制
---
**创建时间**2025-01-27
**版本**1.0.0
**状态**:✅ 可用