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

287 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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