287 lines
6.0 KiB
Markdown
287 lines
6.0 KiB
Markdown
|
|
# 语音测评功能修复总结
|
|||
|
|
|
|||
|
|
## ✅ 已修复的问题
|
|||
|
|
|
|||
|
|
### 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
|