Ai_GirlFriend/xuniYou/按住说话调试指南.md

162 lines
4.1 KiB
Markdown
Raw Permalink Normal View History

2026-02-28 09:40:18 +08:00
# 按住说话功能调试指南
## 问题现象
按住说话按钮后,日志显示"开始说话"和"停止说话",但没有音频数据发送。
## 已添加的调试日志
### 1. 按住按钮时
```
startTalking 被调用, micEnabled: true, isRecording: false
开始说话, isTalking 设置为: true
录音未启动,开始启动录音
```
### 2. 录音启动时
```
=== startRecording 被调用 ===
isRecording: false
isApp: true/false
socketTask 状态: 1 (1表示已连接)
```
### 3. App 端原生录音
```
=== startRecord (App原生) 被调用 ===
请求录音权限
权限请求结果: {...}
录音权限已授予
开始启动原生录音器
原生录音器已启动
收到原生音频帧, isTalking: true, buffer size: xxx
✅ 发送原生音频数据到服务器
```
### 4. 小程序/H5 端录音
```
小程序/H5 端:设置录音监听器
启动 recorderManager
recorderManager.start 已调用
✅ 录音已开始
收到音频帧, isTalking: true, frameBuffer size: xxx
✅ 发送音频数据到服务器
音频数据发送成功
```
## 检查清单
### 1. WebSocket 连接状态
查看日志中的 `socketTask 状态`
- `0` = CONNECTING (连接中)
- `1` = OPEN (已连接) ✅
- `2` = CLOSING (关闭中)
- `3` = CLOSED (已关闭)
如果不是 `1`,说明 WebSocket 未连接成功。
### 2. 录音权限
App 端查看:
```
权限请求结果: { granted: [...], deniedAlways: [], deniedPresent: [] }
```
- `granted` 数组应该包含 `android.permission.RECORD_AUDIO`
- 如果在 `deniedAlways``deniedPresent` 中,需要手动授权
### 3. 录音是否真正启动
查看是否有:
- App 端:`原生录音器已启动`
- 小程序端:`✅ 录音已开始`
如果没有,可能是:
- 权限被拒绝
- recorderManager 初始化失败
- 录音参数不支持
### 4. 音频帧是否产生
查看是否有:
- `收到音频帧``收到原生音频帧`
如果没有,说明录音器没有产生音频数据。
### 5. isTalking 状态
查看日志中的 `isTalking` 值:
- 按住时应该是 `true`
- 松开时应该是 `false`
如果一直是 `false`,说明状态没有正确更新。
## 常见问题及解决方案
### 问题1录音权限被拒绝
**现象**:日志显示 `录音权限被拒绝`
**解决**
1. 进入手机设置 → 应用管理 → 找到你的应用
2. 权限管理 → 麦克风 → 允许
### 问题2recorderManager 未初始化
**现象**:日志显示 `recorderManager 未初始化`
**解决**
1. 确认 manifest.json 中 `Record` 模块已启用
2. 重新编译项目
3. 检查是否在 App 端App 端不使用 recorderManager
### 问题3WebSocket 未连接
**现象**`socketTask 状态: null` 或不是 `1`
**解决**
1. 检查后端服务是否启动
2. 检查 WebSocket URL 是否正确
3. 检查 token 是否有效
### 问题4音频帧不发送
**现象**:有 `收到音频帧` 但没有 `发送音频数据`
**解决**
1. 检查 `isTalking` 是否为 `true`
2. 检查 `socketTask.readyState` 是否为 `1`
3. 确认按住按钮时没有松开
### 问题5录音格式不支持
**现象**:录音启动失败或报错
**解决**
尝试修改录音参数:
```javascript
recorderManager.start({
format: 'mp3', // 改为 mp3 试试
sampleRate: 16000,
numberOfChannels: 1,
frameSize: 1 // 改小一点
});
```
## 测试步骤
1. **清空控制台**
2. **进入语音通话页面**
- 查看 WebSocket 是否连接成功
- 查看是否有 `WebSocket onOpen` 日志
3. **按住"按住说话"按钮**
- 应该看到 `startTalking 被调用`
- 应该看到 `isTalking 设置为: true`
- 应该看到 `=== startRecording 被调用 ===`
- 应该看到录音启动成功的日志
4. **保持按住 2-3 秒**
- 应该看到多个 `收到音频帧` 日志
- 应该看到多个 `✅ 发送音频数据到服务器` 日志
5. **松开按钮**
- 应该看到 `停止说话, isTalking 设置为: false`
- 之后的音频帧应该显示 `⏸️ 不发送音频数据`
## 下一步
如果按照上述步骤仍然无法工作,请:
1. 截图完整的控制台日志
2. 说明是在什么平台测试App/小程序/H5
3. 说明具体卡在哪一步