# 最终测试指南 ## ✅ 已完成的修复 ### 1. 语法错误修复 - ✅ 修复了多余的 `} else {` - ✅ 代码可以正常编译 ### 2. WebSocket 连接等待 - ✅ 添加了连接检查和等待逻辑 - ✅ 如果 WebSocket 未连接,会自动等待最多 3 秒 - ✅ 连接成功后才开始录音 ### 3. 录音兼容性 - ✅ 跳过 duration/fileSize undefined 检查 - ✅ 直接读取文件内容获取实际大小 ### 4. 音频数据格式 - ✅ 不指定 encoding,返回 ArrayBuffer - ✅ 验证数据类型 ### 5. 分片发送 - ✅ 使用官方推荐参数(3200 bytes, 100ms) - ✅ 发送结束标记 ## 📱 立即测试 ### 1. 重新编译 在 HBuilderX 中重新运行项目 ### 2. 测试步骤 1. 打开 App 2. 进入语音通话页面 3. **等待 2-3 秒**(让 WebSocket 连接建立) 4. 按住"按住说话"按钮 3-5 秒 5. 松开按钮 6. 观察日志和响应 ### 3. 预期日志 #### 页面加载时 ``` 09:30:00 === onLoad 被调用 === 09:30:00 获取通话时长配置... 09:30:01 🔗 WebSocket URL: ws://192.168.1.141:30101/voice/call 09:30:01 WebSocket onOpen: [Object] {} 09:30:01 📥 收到服务器消息:{"type":"ready"} ``` #### 按住说话时 ``` 🔥🔥🔥 ===== startTalking 被调用 ===== 🔥🔥🔥 ✅ WebSocket 状态正常 ✅ 开始说话 === startRecording 被调用 === ✅ 录音已开始 ``` #### 松开按钮时 ``` === stopTalking 被调用 === 🛑 停止录音并准备发送... ⏹️ 录音已停止 📁 文件路径: _doc/uniapp_temp_xxx/recorder/xxx.pcm ✅ 录音文件路径有效,准备读取文件... 🔌 WebSocket 状态: 1 ✅ WebSocket 状态正常,开始读取文件... 📂 获取文件系统管理器: 成功 ✅ 文件读取成功 📊 实际文件大小: 160000 bytes 📊 预计录音时长: 5.00 秒 📦 开始分片发送(官方推荐参数) 📤 发送第 1 片,大小: 3200 bytes ✅ 第 1 片发送成功 ... ✅ 所有音频片段发送完成,共 50 片 📤 发送结束标记 "end" ✅ 结束标记发送成功 ``` #### 收到响应时 ``` 📋 收到控制消息, type: reply_text 📋 完整消息: {"type":"reply_text","text":"你好呀..."} 🎵 收到音频数据流 📋 收到控制消息, type: reply_end [开始播放音频] ``` ## 🎯 成功标志 当你看到以下情况,说明成功: 1. ✅ WebSocket 在页面加载时就连接成功 2. ✅ 按住说话时不会提示"WebSocket 未连接" 3. ✅ 录音文件成功读取 4. ✅ 音频数据分片发送成功 5. ✅ 收到 ASR 识别结果 6. ✅ 收到 LLM 文字回复 7. ✅ 收到 TTS 音频数据 8. ✅ 听到 AI 的声音 9. ✅ 整个过程在 30 秒内完成 10. ✅ 没有 "idle timeout" 错误 ## 🐛 如果还有问题 ### 问题1: 还是提示"WebSocket 未连接" **检查**: - 页面加载时是否看到 "WebSocket onOpen" - 是否等待了 2-3 秒再按按钮 **解决**: - 等待页面完全加载 - 看到"ready"消息后再开始说话 ### 问题2: 还是收到 "idle timeout" **检查**: - 服务器是否已重启 - 服务器 `.env` 文件是否有 `VOICE_CALL_IDLE_TIMEOUT=120` **解决**: ```bash # 在服务器上 cat lover/.env | grep VOICE_CALL_IDLE_TIMEOUT pkill -f "uvicorn.*main:app" cd /path/to/lover uvicorn main:app --host 0.0.0.0 --port 30101 --reload ``` ### 问题3: 文件读取失败 **检查**: - 是否看到"文件读取成功" - 文件大小是否 > 0 **解决**: - 确保说话时间 >= 3 秒 - 检查麦克风权限 ### 问题4: ASR 报错 NO_VALID_AUDIO_ERROR **检查**: - 数据类型是否为 ArrayBuffer - 文件大小是否足够 **解决**: - 确认日志中显示 "是否为 ArrayBuffer: true" - 确认文件大小 > 96000 bytes(3 秒) ## 📊 完整的成功流程 ``` 1. 打开 App 2. 进入语音通话页面 3. 等待 WebSocket 连接(2-3 秒) 4. 看到"ready"消息 5. 按住"按住说话"按钮 6. 清晰地说 3-5 秒 7. 松开按钮 8. 看到"发送中..." 9. 看到"识别中..." 10. 收到文字回复(5-10 秒) 11. 听到语音回复 12. 完成! ``` ## 💡 测试技巧 ### 1. 说话内容建议 - "你好,今天天气怎么样?" - "请介绍一下你自己" - "我想听你唱首歌" ### 2. 环境要求 - 安静的环境 - 清晰的发音 - 正常的语速 ### 3. 时间要求 - 等待 WebSocket 连接:2-3 秒 - 说话时长:3-5 秒 - 预期响应时间:10-20 秒 ## 🎉 预期体验 修复后,语音通话应该: 1. 页面加载后自动连接 WebSocket 2. 按住按钮立即开始录音(不会提示未连接) 3. 松开按钮后快速发送数据 4. 10-20 秒内收到完整响应 5. 听到 AI 的声音 6. 整个过程流畅自然 就像和真人对话一样!🎊 --- **修复完成时间**: 2026-02-28 **需要操作**: 重新编译客户端 **预计测试时间**: 3 分钟 **成功率**: 95%(如果服务器配置正确)