Ai_GirlFriend/xuniYou/最终测试指南.md
2026-03-02 18:57:11 +08:00

4.8 KiB
Raw Blame History

最终测试指南

已完成的修复

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

解决

# 在服务器上
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%(如果服务器配置正确)