168 lines
3.9 KiB
Markdown
168 lines
3.9 KiB
Markdown
# 语音通话测试检查清单
|
||
|
||
## ✅ 优化完成确认
|
||
|
||
- [x] 服务器 `.env` 文件已添加 `VOICE_CALL_IDLE_TIMEOUT=120`
|
||
- [x] 客户端分片参数已优化为官方推荐值(3200 bytes, 100ms)
|
||
- [ ] 服务器已重启(**必须执行**)
|
||
- [ ] 客户端已重新编译
|
||
|
||
## 🔧 服务器重启步骤
|
||
|
||
```bash
|
||
# 1. 停止旧进程
|
||
pkill -f "uvicorn.*main:app"
|
||
|
||
# 2. 确认进程已停止
|
||
ps aux | grep uvicorn
|
||
|
||
# 3. 启动新进程
|
||
cd /path/to/lover
|
||
uvicorn main:app --host 0.0.0.0 --port 30101 --reload
|
||
|
||
# 4. 确认启动成功
|
||
# 应该看到类似输出:
|
||
# INFO: Uvicorn running on http://0.0.0.0:30101
|
||
```
|
||
|
||
## 📱 客户端测试步骤
|
||
|
||
### 1. 准备工作
|
||
- [ ] 确保手机/模拟器已连接
|
||
- [ ] 确保网络连接正常
|
||
- [ ] 确保麦克风权限已授予
|
||
|
||
### 2. 测试流程
|
||
1. [ ] 打开 App
|
||
2. [ ] 进入语音通话页面
|
||
3. [ ] 检查 WebSocket 连接状态(应该显示已连接)
|
||
4. [ ] 按住"按住说话"按钮
|
||
5. [ ] **清晰地说 3-5 秒的话**(例如:"你好,今天天气怎么样?")
|
||
6. [ ] 松开按钮
|
||
7. [ ] 等待响应(应该在 10-20 秒内收到)
|
||
|
||
### 3. 预期结果
|
||
- [ ] 看到"发送中..."提示
|
||
- [ ] 看到"识别中..."提示
|
||
- [ ] 收到文字回复
|
||
- [ ] 听到语音回复
|
||
- [ ] 没有 "idle timeout" 错误
|
||
|
||
## 📊 日志检查
|
||
|
||
### 客户端日志关键信息
|
||
```
|
||
✅ 应该看到:
|
||
📦 开始分片发送(官方推荐参数)
|
||
📊 总大小: [大于 96000] bytes (3秒音频 = 96000 bytes)
|
||
📊 每片大小: 3200 bytes
|
||
📊 发送间隔: 100 ms
|
||
✅ 所有音频片段发送完成
|
||
✅ 结束标记发送成功
|
||
📋 收到控制消息, type: reply_text
|
||
🎵 收到音频数据流
|
||
📋 收到控制消息, type: reply_end
|
||
|
||
❌ 不应该看到:
|
||
❌ WebSocket 关闭, code: 1000
|
||
{"type":"error","msg":"idle timeout"}
|
||
```
|
||
|
||
### 服务器日志关键信息
|
||
```
|
||
✅ 应该看到:
|
||
ASR connection opened
|
||
ASR event end=True sentence=[识别的文字]
|
||
Handle sentence: [识别的文字]
|
||
[LLM 相关日志]
|
||
[TTS 相关日志]
|
||
|
||
❌ 不应该看到:
|
||
idle timeout
|
||
ASR error
|
||
```
|
||
|
||
## 🐛 常见问题
|
||
|
||
### 问题1:还是出现 "idle timeout"
|
||
**检查**:
|
||
- [ ] 服务器是否已重启?
|
||
- [ ] `.env` 配置是否正确?
|
||
- [ ] 录音时长是否足够(至少 3 秒)?
|
||
|
||
**解决**:
|
||
```bash
|
||
# 确认配置
|
||
cat lover/.env | grep VOICE_CALL_IDLE_TIMEOUT
|
||
|
||
# 应该显示:
|
||
VOICE_CALL_IDLE_TIMEOUT=120
|
||
|
||
# 如果没有,手动添加后重启服务器
|
||
```
|
||
|
||
### 问题2:没有收到任何响应
|
||
**检查**:
|
||
- [ ] WebSocket 是否连接?
|
||
- [ ] 网络是否正常?
|
||
- [ ] 服务器是否运行?
|
||
|
||
**解决**:
|
||
```bash
|
||
# 检查服务器状态
|
||
curl http://192.168.1.141:30101/docs
|
||
|
||
# 应该返回 FastAPI 文档页面
|
||
```
|
||
|
||
### 问题3:录音时长太短
|
||
**检查**:
|
||
```
|
||
客户端日志中的 "总大小":
|
||
- 1 秒 = 32000 bytes ❌ 太短
|
||
- 3 秒 = 96000 bytes ✅ 合适
|
||
- 5 秒 = 160000 bytes ✅ 更好
|
||
```
|
||
|
||
**解决**:
|
||
- 说话时间延长到 3-5 秒
|
||
- 清晰发音,不要含糊
|
||
- 避免背景噪音
|
||
|
||
### 问题4:ASR 无法识别
|
||
**可能原因**:
|
||
- 音频质量差(噪音大)
|
||
- 说话不清晰
|
||
- 音频格式不对
|
||
|
||
**解决**:
|
||
- 在安静环境测试
|
||
- 清晰发音
|
||
- 确认录音格式为 PCM 16kHz 单声道
|
||
|
||
## 📞 需要帮助?
|
||
|
||
如果测试失败,请提供:
|
||
|
||
1. **客户端日志**(完整的,从按下按钮到收到响应)
|
||
2. **服务器日志**(查看 `tail -f logs/app.log`)
|
||
3. **录音信息**:
|
||
- 总大小(bytes)
|
||
- 时长(秒)
|
||
- 片数
|
||
4. **错误信息**(如果有)
|
||
|
||
## 🎉 测试成功标志
|
||
|
||
当你看到以下情况,说明测试成功:
|
||
|
||
1. ✅ 按住按钮,说话 3-5 秒
|
||
2. ✅ 松开按钮,看到"发送中..."
|
||
3. ✅ 看到"识别中..."
|
||
4. ✅ 收到文字回复(例如:"你好呀,今天天气不错~")
|
||
5. ✅ 听到语音回复(AI 的声音)
|
||
6. ✅ 整个过程在 20 秒内完成
|
||
7. ✅ 没有任何错误提示
|
||
|
||
恭喜!语音通话功能已正常工作!🎊
|