guoyu/语音测评问题修复总结.md

6.0 KiB
Raw Blame History

语音测评功能修复总结

已修复的问题

1. 路径转换问题

问题: 传给百度API的是数据库路径不是文件系统路径

❌ /profile/upload/voice/2025/12/07/xxx.mp3
✅ D:\wwwroot\study_web\web\profile\upload\voice\2025\12\07\xxx.mp3

修复文件: VoiceEvaluationServiceImpl.java

  • 添加 convertToRealPath() 方法
  • 调用百度API前先转换路径

2. API密钥配置问题

问题: 使用了未配置的 BaiduVoiceRecognitionService

 BaiduVoiceRecognitionService (APP_ID = "你的APP_ID")
 BaiduSpeechService (APP_ID = "7307076")

修复文件: VoiceEvaluationServiceImpl.java

  • 改用 BaiduSpeechService

3. 录音格式统一

问题: 不同地方使用不同的录音格式

✅ 统一使用 MP3 格式
✅ 采样率16000Hz
✅ 声道:单声道
✅ 码率96kbps

修复文件:

  • speech-recorder.js
  • evaluation.vue

4. 权限检查完善

问题: 权限检查不完整

✅ 添加 checkPermission() 方法
✅ init() 改为异步并检查权限
✅ 权限被拒绝时显示提示

修复文件:

  • speech-recorder.js
  • evaluation.vue
  • speech.vue

5. MP3时长计算

问题: BaiduSpeechService 不计算 MP3 格式的时长

 添加 MP3 时长估算audioData.length / 12000.0

修复文件: BaiduSpeechService.java


🔄 完整工作流程(修复后)

1. APP录音
   ├─ 检查权限
   ├─ 格式MP3, 16kHz, 单声道, 96kbps
   └─ 时长:建议 3-10秒

2. 上传到后端
   ├─ API: /study/voiceEvaluation/uploadAndEvaluate
   └─ 参数file, content, courseId, language

3. 后端处理
   ├─ 保存文件D:\wwwroot\...\upload\voice\2025\12\07\xxx.mp3
   ├─ 数据库记录:/profile/upload/voice/2025/12/07/xxx.mp3
   └─ 调用评测服务

4. 路径转换
   ├─ 数据库路径 → 文件系统路径
   └─ 验证文件存在

5. 百度API识别
   ├─ 读取音频文件
   ├─ 计算时长MP3: size/12000
   ├─ 调用 client.asr()
   └─ 获取识别文本

6. 计算评分
   ├─ 准确度 (30%)
   ├─ 完整度 (25%)
   ├─ 流畅度 (30%)
   └─ 发音 (15%)

7. 返回结果
   ├─ 保存到数据库
   └─ 返回给APP

📋 部署前检查清单

后端检查

  • 确认 BaiduSpeechService 中 API 密钥已配置

    APP_ID = "7307076"
    API_KEY = "RtL2IfV3FbLnVDDacRV6QDae"
    SECRET_KEY = "NobJaGFov7II95fnFUBNGBk0Wm3fcNIB"
    
  • 确认 application.yml 路径配置正确

    ruoyi:
      profile: D:\wwwroot\study_web\web\profile
    
  • 确认服务器文件夹存在

    D:\wwwroot\study_web\web\profile\upload\voice\
    

前端检查

  • 录音格式统一为 MP3
  • 权限检查代码已添加
  • API 地址配置正确

🚀 部署步骤

1. 打包后端

cd Study-Vue-redis
mvn clean package -DskipTests

2. 打包前端

cd fronted_uniapp
npm run build:app

3. 部署到服务器

  • 停止旧服务
  • 替换 jar 文件
  • 启动新服务

4. 安装APP到设备

  • 卸载旧版本
  • 安装新版本
  • 首次打开授予录音权限

🧪 测试步骤

1. 测试麦克风

操作:点击"测试麦克风"按钮
预期:能听到自己的录音

2. 测试语音测评

操作:
1. 选择或输入测评内容(如:"春眠不觉晓"
2. 点击"开始录音"
3. 清晰朗读 3-10 秒
4. 点击"停止录音"
5. 点击"开始评测"

预期:
- 显示"评测中..."
- 等待 3-5 秒
- 显示评测结果(分数、准确度等)

3. 查看后端日志

关键日志:
✓ 开始语音评测,音频路径:/profile/upload/voice/...
✓ 转换后的文件系统路径D:\wwwroot\...
✓ 文件存在大小XXX bytes
✓ 调用百度API识别音频 - 大小: XXX bytes, 格式: mp3, 估算时长: X.XX秒
✓ 百度API响应: {...}
✓ 百度语音识别结果: XXXX
✓ 语音评测完成,总分: XX

⚠️ 常见问题排查

问题1录音失败

症状:点击"开始录音"无反应
排查:
1. 检查权限是否授予
2. 查看控制台日志
3. 尝试"测试麦克风"功能

问题2上传失败

症状:显示"上传失败"或"网络错误"
排查:
1. 检查网络连接
2. 确认后端服务运行
3. 检查 API 地址配置

问题3评测失败

症状:显示"评测失败"或"识别失败"
排查:
1. 查看后端日志
2. 确认文件是否保存成功
3. 检查百度 API 配置
4. 确认服务器能访问 https://vop.baidu.com

问题4识别结果为空

症状:显示"未识别到有效语音"
排查:
1. 确认录音时长 >= 2秒
2. 确认说话声音清晰
3. 检查录音文件大小
4. 尝试重新录音

📞 百度API配额检查

访问:https://console.bce.baidu.com/ai/#/ai/speech/overview/index

免费额度:每天 50,000 次 当前使用:查看控制台


📝 修改的文件列表

后端 Java 文件

  1. VoiceEvaluationServiceImpl.java - 主要修复文件

    • 添加路径转换方法
    • 改用 BaiduSpeechService
    • 添加文件存在性检查
  2. BaiduSpeechService.java - 添加 MP3 时长计算

前端文件

  1. speech-recorder.js - 统一录音格式,添加权限检查
  2. evaluation.vue - 添加权限检查
  3. speech.vue - 删除冗余权限代码

验证通过标准

所有以下测试通过才算修复成功:

  • 麦克风测试能正常录音和播放
  • 语音测评能成功上传录音
  • 后端日志显示百度API调用成功
  • 能获取识别文本
  • 能计算出评分非0分
  • APP能正常显示评测结果
  • 历史记录能正常保存和查看

🎉 预期结果

修复后的效果:

  1. 录音功能正常
  2. 上传成功
  3. 百度API识别成功
  4. 返回准确的评分
  5. 显示识别文本和分数

生成时间2025-12-07