guoyu/Test/md/录音问题诊断.md

127 lines
3.4 KiB
Markdown
Raw Normal View History

# 录音只识别最后几个字 - 问题诊断
## 🔍 问题描述
用户录音5秒但只识别到最后几个字。
## 🐛 根本原因
**录音文件本身不完整!** 不是识别问题,而是音频数据丢失。
## 📊 诊断方法
### 1. 查看前端日志(关键)
重新运行APP后录音并停止查看控制台
```
[Speech] 实际录音时长: 5.2 秒 ← 用户点击停止时的时长
[录音] 准备停止录音...
[录音] 录音结束,详细信息: {
duration: 523, ← 录音管理器报告的时长(ms)
fileSize: 15000 ← 文件大小
}
[录音] 文件验证成功,大小: 15000 bytes ← 实际文件大小
```
**关键对比:**
- **预期大小**5秒 × 32000 bytes/秒 = 160000 bytes
- **实际大小**15000 bytes说明只录了约0.5秒!)
### 2. 查看后端日志
```
调用百度API识别音频 - 大小: 15000 bytes, 格式: wav, 估算时长: 0.46秒
```
**如果后端时长 << 前端时长 确认是录音文件不完整**
## ✅ 解决方案
### 已实施的修复:
#### 1. **增加stop()延迟300ms + 200ms**
```javascript
// 等待300ms让音频缓冲完全写入
setTimeout(() => {
// 等待onStop事件
// 再等待200ms确保文件完全写入磁盘
}, 300)
```
#### 2. **增加frameSize缓冲**
```javascript
frameSize: 50 // 增加缓冲,避免数据丢失
```
#### 3. **详细日志**
- 显示录音时长、文件大小
- 验证文件是否完整
## 🧪 测试步骤
### 测试1验证录音完整性
1. 重新运行APP
2. 选择题目
3. 点击"开始说话"
4. **大声清晰说5秒**"白日依山尽,黄河入海流,欲穷千里目,更上一层楼"
5. 等待3秒提示后点击"停止识别"
### 预期结果:
**前端日志:**
```
[Speech] 实际录音时长: 5.2 秒
[录音] 录音结束,详细信息: { duration: 5200, fileSize: 170000 }
[录音] 文件验证成功,大小: 170000 bytes ✅ 约5.3秒
```
**后端日志:**
```
调用百度API识别音频 - 大小: 170000 bytes, 格式: wav, 估算时长: 5.31秒 ✅
音频时长合适: 5.31秒推荐范围2-10秒
识别成功: '白日依山尽黄河入海流欲穷千里目更上一层楼' ✅
```
### 如果还是不完整:
**可能原因:**
1. **手机性能问题** - 录音缓冲区被覆盖
2. **存储空间不足** - 无法完整保存文件
3. **系统限制** - Android/iOS版本限制
**进一步诊断:**
```
[录音] 文件验证成功,大小: 15000 bytes ← 还是很小
→ 说明uni-app录音管理器本身有问题
```
**终极解决方案:**
- 使用原生录音插件UTS插件
- 或分段录音3-5秒一段
## 📱 不同场景的时长要求
| 场景 | 推荐时长 | 说明 |
|------|---------|------|
| 短句 | 3-5秒 | 最佳识别效果 |
| 中等 | 5-8秒 | 良好识别效果 |
| 长句 | 8-10秒 | 可识别,建议分段 |
| 超长 | >10秒 | 可能只识别部分 |
## 🎯 用户使用建议
1. **说话节奏**:不要太快,每个字清晰
2. **音量**:正常说话音量,不要太小
3. **时长**3-8秒最佳
4. **环境**:安静环境,避免噪音
5. **长内容**:分段录音,不要一次录太长
## 🔧 后续优化方向
如果问题依然存在:
1. 考虑使用原生录音插件
2. 实现实时语音识别(流式传输)
3. 或改为使用百度长语音识别API60秒
---
**重新运行APP测试查看日志中的文件大小是否正常**