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