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

3.4 KiB
Raw Blame 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

// 等待300ms让音频缓冲完全写入
setTimeout(() => {
  // 等待onStop事件
  // 再等待200ms确保文件完全写入磁盘
}, 300)

2. 增加frameSize缓冲

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测试查看日志中的文件大小是否正常