Ai_GirlFriend/xuniYou/最终测试指南.md

205 lines
4.8 KiB
Markdown
Raw Normal View History

2026-03-02 18:57:11 +08:00
# 最终测试指南
## ✅ 已完成的修复
### 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 bytes3 秒)
## 📊 完整的成功流程
```
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%(如果服务器配置正确)