Ai_GirlFriend/xuniYou/调试步骤.md
2026-03-02 18:57:11 +08:00

157 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# NO_VALID_AUDIO_ERROR 调试步骤
## 🔍 问题分析
从日志来看ASR 连接已打开,但是报错 `NO_VALID_AUDIO_ERROR`,说明服务器没有收到有效的音频数据。
## ✅ 已完成的修复
1. ✅ 添加了 `ptt_on` 信号发送(在 `startTalking` 方法中)
2. ✅ 添加了 `frameSize: 5` 参数(启用实时音频帧传输)
3. ✅ 已有 `onFrameRecorded` 回调(实时发送音频帧)
4. ✅ 已有 `onStop` 回调(作为备用方案,发送完整文件)
## 📋 重新编译和测试
### 1. 重新编译项目
在 HBuilderX 中:
1. 停止当前运行
2. 清理缓存:菜单 -> 运行 -> 清理缓存
3. 重新运行到手机/模拟器
### 2. 测试步骤
1. 打开 App进入语音通话页面
2. 按住"按住说话"按钮
3. 说话 3-5 秒
4. 松开按钮
5. 观察日志
### 3. 预期日志(成功的情况)
```
✅ 开始说话, isTalking 设置为: true
📤 发送 ptt_on 信号
✅ ptt_on 信号发送成功
录音未启动,开始启动录音
=== startRecording 被调用 ===
✅ 录音已开始
🎤 收到音频帧 #1, isTalking: true, frameBuffer size: 3200
✅ 发送音频帧到服务器, 帧号: 1
✅ 音频帧发送成功, 帧号: 1
🎤 收到音频帧 #2, isTalking: true, frameBuffer size: 3200
...
=== stopTalking 被调用 ===
❌ 停止说话, isTalking 设置为: false
🛑 停止录音并准备发送...
⏹️ 录音已停止
```
### 4. 如果还是没有 "🎤 收到音频帧" 日志
说明 `onFrameRecorded` 在你的设备上不支持,这时会自动降级到 `onStop` 方案:
**预期日志(降级方案):**
```
✅ 开始说话, isTalking 设置为: true
📤 发送 ptt_on 信号
✅ ptt_on 信号发送成功
录音未启动,开始启动录音
✅ 录音已开始
=== stopTalking 被调用 ===
🛑 停止录音并准备发送...
⏹️ 录音已停止
📁 文件路径: /xxx/recorder/xxx.pcm
✅ 文件读取成功
📊 是否为 ArrayBuffer: true
📊 文件大小: 160000 bytes
📦 开始分片发送
📤 发送第 1 片,大小: 3200 bytes
✅ 第 1 片发送成功
...
✅ 所有音频片段发送完成
✅ ptt_off 信号发送成功
```
## 🐛 如果还是报错
### 检查点 1确认 ptt_on 信号是否发送
在日志中搜索:
- `📤 发送 ptt_on 信号`
- `✅ ptt_on 信号发送成功`
如果没有这些日志,说明代码没有重新编译。
### 检查点 2确认音频数据是否发送
在日志中搜索:
- `🎤 收到音频帧`(实时方案)
-`📤 发送第 X 片`(降级方案)
如果没有这些日志,说明音频数据没有发送到服务器。
### 检查点 3WebSocket 连接状态
确认日志中有:
```
WebSocket onOpen
```
并且在发送音频前WebSocket 状态为 1OPEN
## 🔧 临时调试方案
如果上述都正常,但还是报错,可以尝试:
### 方案 1增加延迟
在发送 `ptt_on` 后,等待 500ms 再开始录音:
```javascript
// 发送 ptt_on 信号
this.socketTask.send({ data: 'ptt_on' })
// 等待 500ms让服务器准备好
await new Promise(resolve => setTimeout(resolve, 500))
// 开始录音
if (!this.isRecording) {
this.startRecording()
}
```
### 方案 2检查服务器日志
查看服务器日志中是否有:
```
INFO - ASR connection opened
INFO - mic_enabled set to True
```
如果没有 "mic_enabled set to True",说明服务器没有收到 `ptt_on` 信号。
### 方案 3手动测试 WebSocket
使用 WebSocket 测试工具(如 Postman连接到
```
ws://你的服务器地址/voice/call?token=你的token&ptt=true
```
然后手动发送:
1. 文本消息:`ptt_on`
2. 二进制消息:一些音频数据
3. 文本消息:`ptt_off`
看服务器是否正常响应。
## 📞 联系支持
如果以上步骤都无法解决,请提供:
1. 完整的客户端日志(从连接到报错)
2. 完整的服务器日志(从连接到报错)
3. 设备信息Android 版本、手机型号)
4. uni-app 版本和 HBuilderX 版本