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
|