Ai_GirlFriend/xuniYou/按住说话调试指南.md
2026-02-28 09:40:18 +08:00

162 lines
4.1 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.

# 按住说话功能调试指南
## 问题现象
按住说话按钮后,日志显示"开始说话"和"停止说话",但没有音频数据发送。
## 已添加的调试日志
### 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. 说明具体卡在哪一步