205 lines
4.8 KiB
Markdown
205 lines
4.8 KiB
Markdown
|
|
# 最终测试指南
|
|||
|
|
|
|||
|
|
## ✅ 已完成的修复
|
|||
|
|
|
|||
|
|
### 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%(如果服务器配置正确)
|