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

287 lines
6.0 KiB
Markdown
Raw Normal View 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`
```java
❌ 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 格式的时长
```java
✅ 添加 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 密钥已配置
```java
APP_ID = "7307076"
API_KEY = "RtL2IfV3FbLnVDDacRV6QDae"
SECRET_KEY = "NobJaGFov7II95fnFUBNGBk0Wm3fcNIB"
```
- [ ] 确认 `application.yml` 路径配置正确
```yaml
ruoyi:
profile: D:\wwwroot\study_web\web\profile
```
- [ ] 确认服务器文件夹存在
```
D:\wwwroot\study_web\web\profile\upload\voice\
```
### 前端检查
- [ ] 录音格式统一为 MP3
- [ ] 权限检查代码已添加
- [ ] API 地址配置正确
---
## 🚀 部署步骤
### 1. 打包后端
```bash
cd Study-Vue-redis
mvn clean package -DskipTests
```
### 2. 打包前端
```bash
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