# UniApp微信小程序TTS接口调用说明 本文档详细介绍如何在UniApp微信小程序中调用后端的文字转语音(TTS)接口。 ## 📁 文件说明 ### 1. uniapp-tts-example.vue 完整的TTS功能页面组件,包含: - 文本输入界面 - 音色选择功能 - 语速和音量调节 - 音频格式选择 - 音频播放功能 - 完整的错误处理 ### 2. uniapp-tts-config.js TTS功能的配置文件,包含: - API接口配置 - 参数验证工具 - 错误处理配置 - 通用工具函数 ## 🚀 快速开始 ### 1. 文件集成 将以下文件复制到你的UniApp项目中: ``` your-project/ ├── pages/ │ └── tts/ │ └── index.vue # 复制 uniapp-tts-example.vue 内容 ├── utils/ │ └── tts-config.js # 复制 uniapp-tts-config.js 内容 └── pages.json # 添加页面路由配置 ``` ### 2. 页面路由配置 在 `pages.json` 中添加TTS页面路由: ```json { "pages": [ { "path": "pages/tts/index", "style": { "navigationBarTitleText": "文字转语音", "navigationBarBackgroundColor": "#007aff", "navigationBarTextStyle": "white" } } ] } ``` ### 3. 配置API地址 修改 `uniapp-tts-config.js` 中的API地址: ```javascript export const API_CONFIG = { // 开发环境API地址 DEV_BASE_URL: 'http://localhost:8080', // 修改为你的开发环境地址 // 生产环境API地址 PROD_BASE_URL: 'https://your-domain.com', // 修改为你的生产环境地址 }; ``` ## 🔧 功能特性 ### 1. 音色管理 - 自动加载后端音色列表 - 支持音色选择和切换 - 音色信息缓存 ### 2. 参数控制 - **语速调节**:支持-2到6的语速范围 - **音量控制**:支持-10到10的音量范围 - **格式选择**:支持WAV、MP3、PCM格式 ### 3. 音频处理 - 二进制音频数据处理 - 本地音频文件创建 - 音频播放控制 - 文件大小显示 ### 4. 用户体验 - 实时状态反馈 - 转换进度提示 - 错误信息展示 - 响应式界面设计 ## 📋 接口说明 ### 1. 获取音色列表 **接口地址:** `GET /appletApi/tts/list` **响应格式:** ```json { "success": true, "result": [ { "id": 0, "name": "云小宁", "description": "甜美女声" } ] } ``` ### 2. 文字转语音 **接口地址:** `GET /appletApi/tts/textToVoice` **请求参数:** | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | text | String | 是 | 要转换的文本内容 | | speed | Float | 否 | 语速,范围[-2,6],默认0 | | voiceType | Integer | 否 | 音色ID,默认0 | | volume | Float | 否 | 音量,范围[-10,10],默认0 | | codec | String | 否 | 音频格式,默认wav | | userId | String | 否 | 用户ID,用于日志记录 | **响应格式:** 二进制音频数据 ## 💡 使用示例 ### 1. 基础调用 ```javascript import { API_CONFIG, UTILS } from '@/utils/tts-config.js'; // 调用TTS接口 async function callTTS() { try { const response = await uni.request({ url: UTILS.buildApiUrl(API_CONFIG.ENDPOINTS.TEXT_TO_VOICE), method: 'GET', data: { text: '你好,世界!', speed: 0, voiceType: 0, volume: 0, codec: 'wav', userId: 'user123' }, responseType: 'arraybuffer' }); if (response.statusCode === 200) { // 处理音频数据 console.log('TTS调用成功'); } } catch (error) { console.error('TTS调用失败:', error); } } ``` ### 2. 参数验证 ```javascript import { UTILS } from '@/utils/tts-config.js'; // 验证文本 const textValidation = UTILS.validateText('要转换的文本'); if (!textValidation.valid) { console.error(textValidation.message); return; } // 验证语速 const speedValidation = UTILS.validateSpeed(1); if (!speedValidation.valid) { console.error(speedValidation.message); return; } ``` ### 3. 音频播放 ```javascript // 创建音频上下文 const audioContext = wx.createInnerAudioContext(); audioContext.src = audioFilePath; // 监听播放事件 audioContext.onPlay(() => { console.log('开始播放'); }); audioContext.onEnded(() => { console.log('播放结束'); }); audioContext.onError((error) => { console.error('播放失败:', error); }); // 开始播放 audioContext.play(); ``` ## ⚠️ 注意事项 ### 1. 权限配置 在 `manifest.json` 中配置必要的权限: ```json { "mp-weixin": { "permission": { "scope.writePhotosAlbum": { "desc": "保存音频文件到相册" } } } } ``` ### 2. 网络配置 在微信小程序后台配置服务器域名,将你的API域名添加到request合法域名中。 ### 3. 文件大小限制 - 微信小程序本地文件存储有限制 - 建议音频文件不超过10MB - 长文本建议分段处理 ### 4. 错误处理 ```javascript // 统一错误处理 function handleError(error, context = '') { console.error(`${context}错误:`, error); let message = '操作失败,请重试'; if (error.errMsg) { if (error.errMsg.includes('network')) { message = '网络连接失败,请检查网络'; } else if (error.errMsg.includes('timeout')) { message = '请求超时,请重试'; } } uni.showToast({ title: message, icon: 'error' }); } ``` ## 🔍 调试技巧 ### 1. 开启调试日志 ```javascript // 在开发环境开启详细日志 if (process.env.NODE_ENV === 'development') { console.log('TTS请求参数:', params); console.log('TTS响应数据:', response); } ``` ### 2. 网络请求监控 ```javascript // 监控请求状态 uni.onNetworkStatusChange((res) => { console.log('网络状态:', res.isConnected ? '已连接' : '已断开'); console.log('网络类型:', res.networkType); }); ``` ### 3. 性能监控 ```javascript // 监控转换耗时 const startTime = Date.now(); // ... TTS调用 ... const endTime = Date.now(); console.log(`TTS转换耗时: ${(endTime - startTime) / 1000}秒`); ``` ## 📈 性能优化 ### 1. 音色列表缓存 ```javascript // 缓存音色列表,避免重复请求 const VOICE_CACHE_KEY = 'tts_voice_list'; const CACHE_EXPIRE_TIME = 24 * 60 * 60 * 1000; // 24小时 function getCachedVoiceList() { const cached = uni.getStorageSync(VOICE_CACHE_KEY); if (cached && (Date.now() - cached.timestamp) < CACHE_EXPIRE_TIME) { return cached.data; } return null; } ``` ### 2. 音频文件管理 ```javascript // 清理过期的音频文件 function cleanupAudioFiles() { const fileManager = wx.getFileSystemManager(); // 实现文件清理逻辑 } ``` ### 3. 请求防抖 ```javascript // 防止重复请求 let isConverting = false; async function convertToVoice() { if (isConverting) { console.log('正在转换中,请稍候...'); return; } isConverting = true; try { // TTS转换逻辑 } finally { isConverting = false; } } ``` ## 🤝 技术支持 如果在使用过程中遇到问题,请检查: 1. **网络连接**:确保设备网络正常 2. **API地址**:确认API地址配置正确 3. **参数格式**:检查请求参数是否符合要求 4. **权限设置**:确认小程序权限配置正确 5. **后端服务**:确认后端TTS服务正常运行 ## 📝 更新日志 ### v1.0.0 (2025-01-XX) - 初始版本发布 - 支持基础TTS功能 - 完整的参数控制 - 音频播放功能 - 错误处理机制 --- **注意:** 本示例基于JeecgBoot 3.8.1框架开发,使用腾讯云TTS服务。在实际使用时,请根据你的具体环境进行相应调整。