四零语境后端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

363 lines
7.5 KiB

15 hours ago
  1. # UniApp微信小程序TTS接口调用说明
  2. 本文档详细介绍如何在UniApp微信小程序中调用后端的文字转语音(TTS)接口。
  3. ## 📁 文件说明
  4. ### 1. uniapp-tts-example.vue
  5. 完整的TTS功能页面组件,包含:
  6. - 文本输入界面
  7. - 音色选择功能
  8. - 语速和音量调节
  9. - 音频格式选择
  10. - 音频播放功能
  11. - 完整的错误处理
  12. ### 2. uniapp-tts-config.js
  13. TTS功能的配置文件,包含:
  14. - API接口配置
  15. - 参数验证工具
  16. - 错误处理配置
  17. - 通用工具函数
  18. ## 🚀 快速开始
  19. ### 1. 文件集成
  20. 将以下文件复制到你的UniApp项目中:
  21. ```
  22. your-project/
  23. ├── pages/
  24. │ └── tts/
  25. │ └── index.vue # 复制 uniapp-tts-example.vue 内容
  26. ├── utils/
  27. │ └── tts-config.js # 复制 uniapp-tts-config.js 内容
  28. └── pages.json # 添加页面路由配置
  29. ```
  30. ### 2. 页面路由配置
  31. `pages.json` 中添加TTS页面路由:
  32. ```json
  33. {
  34. "pages": [
  35. {
  36. "path": "pages/tts/index",
  37. "style": {
  38. "navigationBarTitleText": "文字转语音",
  39. "navigationBarBackgroundColor": "#007aff",
  40. "navigationBarTextStyle": "white"
  41. }
  42. }
  43. ]
  44. }
  45. ```
  46. ### 3. 配置API地址
  47. 修改 `uniapp-tts-config.js` 中的API地址:
  48. ```javascript
  49. export const API_CONFIG = {
  50. // 开发环境API地址
  51. DEV_BASE_URL: 'http://localhost:8080', // 修改为你的开发环境地址
  52. // 生产环境API地址
  53. PROD_BASE_URL: 'https://your-domain.com', // 修改为你的生产环境地址
  54. };
  55. ```
  56. ## 🔧 功能特性
  57. ### 1. 音色管理
  58. - 自动加载后端音色列表
  59. - 支持音色选择和切换
  60. - 音色信息缓存
  61. ### 2. 参数控制
  62. - **语速调节**:支持-2到6的语速范围
  63. - **音量控制**:支持-10到10的音量范围
  64. - **格式选择**:支持WAV、MP3、PCM格式
  65. ### 3. 音频处理
  66. - 二进制音频数据处理
  67. - 本地音频文件创建
  68. - 音频播放控制
  69. - 文件大小显示
  70. ### 4. 用户体验
  71. - 实时状态反馈
  72. - 转换进度提示
  73. - 错误信息展示
  74. - 响应式界面设计
  75. ## 📋 接口说明
  76. ### 1. 获取音色列表
  77. **接口地址:** `GET /appletApi/tts/list`
  78. **响应格式:**
  79. ```json
  80. {
  81. "success": true,
  82. "result": [
  83. {
  84. "id": 0,
  85. "name": "云小宁",
  86. "description": "甜美女声"
  87. }
  88. ]
  89. }
  90. ```
  91. ### 2. 文字转语音
  92. **接口地址:** `GET /appletApi/tts/textToVoice`
  93. **请求参数:**
  94. | 参数名 | 类型 | 必填 | 说明 |
  95. |--------|------|------|------|
  96. | text | String | 是 | 要转换的文本内容 |
  97. | speed | Float | 否 | 语速,范围[-2,6],默认0 |
  98. | voiceType | Integer | 否 | 音色ID,默认0 |
  99. | volume | Float | 否 | 音量,范围[-10,10],默认0 |
  100. | codec | String | 否 | 音频格式,默认wav |
  101. | userId | String | 否 | 用户ID,用于日志记录 |
  102. **响应格式:** 二进制音频数据
  103. ## 💡 使用示例
  104. ### 1. 基础调用
  105. ```javascript
  106. import { API_CONFIG, UTILS } from '@/utils/tts-config.js';
  107. // 调用TTS接口
  108. async function callTTS() {
  109. try {
  110. const response = await uni.request({
  111. url: UTILS.buildApiUrl(API_CONFIG.ENDPOINTS.TEXT_TO_VOICE),
  112. method: 'GET',
  113. data: {
  114. text: '你好,世界!',
  115. speed: 0,
  116. voiceType: 0,
  117. volume: 0,
  118. codec: 'wav',
  119. userId: 'user123'
  120. },
  121. responseType: 'arraybuffer'
  122. });
  123. if (response.statusCode === 200) {
  124. // 处理音频数据
  125. console.log('TTS调用成功');
  126. }
  127. } catch (error) {
  128. console.error('TTS调用失败:', error);
  129. }
  130. }
  131. ```
  132. ### 2. 参数验证
  133. ```javascript
  134. import { UTILS } from '@/utils/tts-config.js';
  135. // 验证文本
  136. const textValidation = UTILS.validateText('要转换的文本');
  137. if (!textValidation.valid) {
  138. console.error(textValidation.message);
  139. return;
  140. }
  141. // 验证语速
  142. const speedValidation = UTILS.validateSpeed(1);
  143. if (!speedValidation.valid) {
  144. console.error(speedValidation.message);
  145. return;
  146. }
  147. ```
  148. ### 3. 音频播放
  149. ```javascript
  150. // 创建音频上下文
  151. const audioContext = wx.createInnerAudioContext();
  152. audioContext.src = audioFilePath;
  153. // 监听播放事件
  154. audioContext.onPlay(() => {
  155. console.log('开始播放');
  156. });
  157. audioContext.onEnded(() => {
  158. console.log('播放结束');
  159. });
  160. audioContext.onError((error) => {
  161. console.error('播放失败:', error);
  162. });
  163. // 开始播放
  164. audioContext.play();
  165. ```
  166. ## ⚠️ 注意事项
  167. ### 1. 权限配置
  168. `manifest.json` 中配置必要的权限:
  169. ```json
  170. {
  171. "mp-weixin": {
  172. "permission": {
  173. "scope.writePhotosAlbum": {
  174. "desc": "保存音频文件到相册"
  175. }
  176. }
  177. }
  178. }
  179. ```
  180. ### 2. 网络配置
  181. 在微信小程序后台配置服务器域名,将你的API域名添加到request合法域名中。
  182. ### 3. 文件大小限制
  183. - 微信小程序本地文件存储有限制
  184. - 建议音频文件不超过10MB
  185. - 长文本建议分段处理
  186. ### 4. 错误处理
  187. ```javascript
  188. // 统一错误处理
  189. function handleError(error, context = '') {
  190. console.error(`${context}错误:`, error);
  191. let message = '操作失败,请重试';
  192. if (error.errMsg) {
  193. if (error.errMsg.includes('network')) {
  194. message = '网络连接失败,请检查网络';
  195. } else if (error.errMsg.includes('timeout')) {
  196. message = '请求超时,请重试';
  197. }
  198. }
  199. uni.showToast({
  200. title: message,
  201. icon: 'error'
  202. });
  203. }
  204. ```
  205. ## 🔍 调试技巧
  206. ### 1. 开启调试日志
  207. ```javascript
  208. // 在开发环境开启详细日志
  209. if (process.env.NODE_ENV === 'development') {
  210. console.log('TTS请求参数:', params);
  211. console.log('TTS响应数据:', response);
  212. }
  213. ```
  214. ### 2. 网络请求监控
  215. ```javascript
  216. // 监控请求状态
  217. uni.onNetworkStatusChange((res) => {
  218. console.log('网络状态:', res.isConnected ? '已连接' : '已断开');
  219. console.log('网络类型:', res.networkType);
  220. });
  221. ```
  222. ### 3. 性能监控
  223. ```javascript
  224. // 监控转换耗时
  225. const startTime = Date.now();
  226. // ... TTS调用 ...
  227. const endTime = Date.now();
  228. console.log(`TTS转换耗时: ${(endTime - startTime) / 1000}秒`);
  229. ```
  230. ## 📈 性能优化
  231. ### 1. 音色列表缓存
  232. ```javascript
  233. // 缓存音色列表,避免重复请求
  234. const VOICE_CACHE_KEY = 'tts_voice_list';
  235. const CACHE_EXPIRE_TIME = 24 * 60 * 60 * 1000; // 24小时
  236. function getCachedVoiceList() {
  237. const cached = uni.getStorageSync(VOICE_CACHE_KEY);
  238. if (cached && (Date.now() - cached.timestamp) < CACHE_EXPIRE_TIME) {
  239. return cached.data;
  240. }
  241. return null;
  242. }
  243. ```
  244. ### 2. 音频文件管理
  245. ```javascript
  246. // 清理过期的音频文件
  247. function cleanupAudioFiles() {
  248. const fileManager = wx.getFileSystemManager();
  249. // 实现文件清理逻辑
  250. }
  251. ```
  252. ### 3. 请求防抖
  253. ```javascript
  254. // 防止重复请求
  255. let isConverting = false;
  256. async function convertToVoice() {
  257. if (isConverting) {
  258. console.log('正在转换中,请稍候...');
  259. return;
  260. }
  261. isConverting = true;
  262. try {
  263. // TTS转换逻辑
  264. } finally {
  265. isConverting = false;
  266. }
  267. }
  268. ```
  269. ## 🤝 技术支持
  270. 如果在使用过程中遇到问题,请检查:
  271. 1. **网络连接**:确保设备网络正常
  272. 2. **API地址**:确认API地址配置正确
  273. 3. **参数格式**:检查请求参数是否符合要求
  274. 4. **权限设置**:确认小程序权限配置正确
  275. 5. **后端服务**:确认后端TTS服务正常运行
  276. ## 📝 更新日志
  277. ### v1.0.0 (2025-01-XX)
  278. - 初始版本发布
  279. - 支持基础TTS功能
  280. - 完整的参数控制
  281. - 音频播放功能
  282. - 错误处理机制
  283. ---
  284. **注意:** 本示例基于JeecgBoot 3.8.1框架开发,使用腾讯云TTS服务。在实际使用时,请根据你的具体环境进行相应调整。