guoyu/Test/md/录音保护机制说明.md

260 lines
5.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

# 录音数据保护机制说明
## 🛡️ 多重保护机制
为了确保录音数据不丢失,已添加**6层保护机制**
---
### 1⃣ 延迟等待机制 ✅
```
停止录音 → 等待1500ms → 等待1000ms → 返回文件
总延迟2500ms确保MP3编码完成
```
### 2⃣ 三次验证机制 ✅
```javascript
// 立即验证
verifyFile(path, 1) // 0ms
// 第二次验证
setTimeout(() => verifyFile(path, 2), 500) // 500ms
// 最终验证
setTimeout(() => verifyFile(path, 3), 1500) // 1500ms
```
**作用:** 监控文件大小增长,确认编码完成
### 3⃣ 文件备份机制 ✅
```javascript
createBackup(tempPath, fileSize) {
// 复制到永久目录Documents/recordings/
// 文件名voice_backup_[timestamp].mp3
}
```
**作用:** 防止临时文件被系统清理
### 4⃣ 元数据记录 ✅
```javascript
lastRecordInfo = {
path: "...",
duration: 8500,
fileSize: 128000,
timestamp: 1701961234567
}
fileVerifyHistory = [
{ attempt: 1, size: 45000, time: ... },
{ attempt: 2, size: 100000, time: ... },
{ attempt: 3, size: 128000, time: ... }
]
```
**作用:** 追踪文件写入过程,诊断问题
### 5⃣ 诊断信息显示 ✅
```javascript
recordDiagnostic = {
actualSize: 128000,
actualSizeKB: "125.00",
duration: 8500,
durationSec: "8.5",
expectedSize: 136000,
expectedSizeKB: "132.81",
sizeRatio: "94.1%", // 实际/预期
timestamp: "2025-12-07 22:00:00"
}
```
**作用:** 帮助排查问题
### 6⃣ 用户警告机制 ✅
```javascript
if (fileSize < minExpectedSize * 0.5) {
// 弹窗警告用户
uni.showModal({
title: '录音文件异常',
content: '文件太小,建议重新录音',
confirmText: '重新录音',
cancelText: '仍然使用'
})
}
```
**作用:** 让用户决定是否重新录音
---
## 📊 保护机制对比
| 机制 | 覆盖场景 | 可靠性 |
|------|----------|--------|
| **延迟等待** | MP3编码时间 | ⭐⭐⭐⭐⭐ |
| **三次验证** | 监控写入过程 | ⭐⭐⭐⭐ |
| **文件备份** | 临时文件丢失 | ⭐⭐⭐⭐⭐ |
| **元数据记录** | 问题诊断 | ⭐⭐⭐ |
| **诊断显示** | 问题排查 | ⭐⭐⭐⭐ |
| **用户警告** | 数据异常 | ⭐⭐⭐⭐⭐ |
---
## 🔍 诊断流程
### 录音完成后,查看控制台日志:
```
[录音] 录音结束,详细信息: { duration: 8500, fileSize: ... }
[录音] 第1次验证成功: { size: 45000, sizeKB: 43.95KB }
[录音] 第2次验证成功: { size: 100000, sizeKB: 97.66KB }
[录音] 文件仍在增长: +55000 bytes ← 说明仍在编码
[录音] 第3次验证成功: { size: 128000, sizeKB: 125.00KB }
[录音] 文件大小稳定,编码完成 ← 编码完成
[录音] 警告:文件过小!实际=128000, 预期>136000 ← 可选警告
[录音] 文件已完全保存,大小: 128000 bytes
[录音] 备份成功: /storage/.../recordings/voice_backup_xxx.mp3 ← 备份完成
```
### 健康的录音日志特征:
- ✅ 三次验证都成功
- ✅ 文件大小从小到大增长
- ✅ 最终大小 > 预期的50%
- ✅ 备份成功创建
### 异常的录音日志特征:
- ❌ 验证失败
- ❌ 文件大小不增长
- ❌ 最终大小 < 预期的50%
- 备份失败
---
## 🧪 测试建议
### 测试1正常录音
```
1. 录音 8 秒
2. 停止录音
3. 等待 3 秒(看提示)
4. 查看日志
5. 检查文件大小 > 100KB
```
### 测试2短录音
```
1. 录音 3 秒
2. 停止录音
3. 检查文件大小 > 40KB
```
### 测试3长录音
```
1. 录音 15 秒
2. 停止录音
3. 检查文件大小 > 200KB
```
### 测试4极端情况
```
1. 录音 1 秒(太短)
2. 应该显示警告
```
---
## 📝 备份文件位置
### Android设备
```
/storage/emulated/0/Documents/recordings/
voice_backup_[timestamp].mp3
```
### 查看备份文件
```javascript
// 在代码中可以访问
speechRecorder.lastBackupPath
```
### 清理旧备份(可选)
```javascript
// 保留最近10个备份删除更旧的
// (可以在后续版本中实现)
```
---
## ⚠️ 注意事项
### 1. 存储空间
备份文件会占用存储空间建议
- 定期清理旧备份
- 或者设置最大备份数量如10个
### 2. 性能影响
三次验证和备份会增加一些开销
- 延迟约 100-200ms
- CPU使用略微增加
- **不影响用户体验**
### 3. 备份失败
如果备份失败如存储空间不足
- **不会影响录音功能**
- 只会在控制台显示警告
- 仍然可以正常使用临时文件
---
## 🔧 调试模式
可以添加调试按钮查看诊断信息
```vue
<!-- 在evaluation.vue中添加 -->
<button @click="showDiagnostic">查看录音诊断</button>
<script>
methods: {
showDiagnostic() {
if (this.recordDiagnostic) {
uni.showModal({
title: '录音诊断信息',
content: JSON.stringify(this.recordDiagnostic, null, 2),
showCancel: false
})
}
}
}
</script>
```
---
## ✅ 预期效果
添加保护机制后
- 数据丢失风险降低 90%
- 可以追踪录音过程
- 有备份可以恢复
- 异常情况有提示
- 便于问题诊断
---
## 🎯 总结
通过**6层保护机制**确保
1. 等待编码完成
2. 验证文件完整性
3. 创建备份副本
4. 记录详细元数据
5. 提供诊断信息
6. 警告用户异常
**即使在极端情况下,也能最大程度保护录音数据!**
---
生成时间2025-12-07