127 lines
3.4 KiB
Markdown
127 lines
3.4 KiB
Markdown
|
|
# 录音只识别最后几个字 - 问题诊断
|
|||
|
|
|
|||
|
|
## 🔍 问题描述
|
|||
|
|
用户录音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. 或改为使用百度长语音识别API(60秒)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**重新运行APP测试,查看日志中的文件大小是否正常!**
|