6.0 KiB
6.0 KiB
语音测评功能修复总结
✅ 已修复的问题
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.jsevaluation.vue
4. 权限检查完善 ✅
问题: 权限检查不完整
✅ 添加 checkPermission() 方法
✅ init() 改为异步并检查权限
✅ 权限被拒绝时显示提示
修复文件:
speech-recorder.jsevaluation.vuespeech.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 文件
-
VoiceEvaluationServiceImpl.java- 主要修复文件- 添加路径转换方法
- 改用 BaiduSpeechService
- 添加文件存在性检查
-
BaiduSpeechService.java- 添加 MP3 时长计算
前端文件
speech-recorder.js- 统一录音格式,添加权限检查evaluation.vue- 添加权限检查speech.vue- 删除冗余权限代码
✅ 验证通过标准
所有以下测试通过才算修复成功:
- 麦克风测试能正常录音和播放
- 语音测评能成功上传录音
- 后端日志显示百度API调用成功
- 能获取识别文本
- 能计算出评分(非0分)
- APP能正常显示评测结果
- 历史记录能正常保存和查看
🎉 预期结果
修复后的效果:
- 录音功能正常 ✅
- 上传成功 ✅
- 百度API识别成功 ✅
- 返回准确的评分 ✅
- 显示识别文本和分数 ✅
生成时间:2025-12-07