gongxiangp2/.kiro/specs/ui-fixes/音频播放问题修复.md

77 lines
2.9 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. 音频播放延迟问题 ⭐⭐⭐
- **问题**: 点击播放按钮后要等一会才开始播放
- **原因**: 使用`canplaythrough`事件等待音频完全加载,导致延迟
- **影响范围**:
- `app/page.tsx` - 首页音频卡片
- `app/share/[id]/page.tsx` - 详情页音频播放
- **修复方案**:
- 改用`canplay`事件(而不是`canplaythrough`),音频缓冲足够就开始播放
- 添加`preload="auto"`确保音频预加载
- 优化音频加载逻辑,减少等待时间
### 2. 环形频谱不工作问题 ⭐⭐⭐
- **问题**: 音频播放时环形频谱可视化不起作用(首页和详情页都有问题)
- **原因**:
1. AudioVisualizer组件没有正确接收到audioElement
2. 首页传递的是`audioRef.current`,但这个引用可能在渲染时为null
3. 详情页没有传递audioElement给AudioVisualizer
- **影响范围**:
- `app/page.tsx` - 首页音频卡片的AudioVisualizer
- `app/share/[id]/page.tsx` - 详情页的AudioVisualizer
- `components/AudioVisualizer.tsx` - 频谱组件本身
- **修复方案**:
- 首页:确保audioRef.current在播放时正确传递给AudioVisualizer
- 详情页:添加audioElement prop传递给AudioVisualizer
- AudioVisualizer:优化音频上下文初始化逻辑
### 3. 进度条拖动功能缺失 ⭐⭐
- **问题**: 音频进度条不能拖动,只能显示进度
- **影响范围**:
- `app/page.tsx` - 首页音频卡片进度条
- `app/share/[id]/page.tsx` - 详情页音频进度条
- **修复方案**:
- 添加进度条点击事件,支持跳转到指定位置
- 添加拖动功能(mousedown + mousemove + mouseup)
- 更新audioRef.current.currentTime实现跳转
## 修复优先级
1. **高优先级(⭐⭐⭐)**: 环形频谱不工作、音频播放延迟
2. **中优先级(⭐⭐)**: 进度条拖动功能
## 修复状态
- **待修复**: 3个
- **修复中**: 0个
- **已完成**: 0个
## 技术细节
### 音频事件对比
| 事件 | 触发时机 | 适用场景 |
|------|----------|----------|
| `canplay` | 浏览器估计可以播放(缓冲了一些数据) | ✅ 快速开始播放 |
| `canplaythrough` | 浏览器估计可以不停顿地播放到结束 | ❌ 等待时间长 |
| `loadeddata` | 首帧数据加载完成 | 可用于显示封面 |
| `loadedmetadata` | 元数据加载完成(时长等) | 可用于显示时长 |
### AudioContext初始化
AudioContext需要在用户交互后才能创建和使用,否则会被浏览器阻止。当前实现已经正确处理了这个问题,但需要确保:
1. audioElement正确传递给AudioVisualizer
2. 在播放时才初始化AudioContext
3. 正确连接audio元素到analyser节点
## 参考文件
- 反编译文件:`shadow_page_full.js`(查看正式环境的音频播放实现)
- AudioVisualizer组件:`components/AudioVisualizer.tsx`
- 首页:`app/page.tsx`
- 详情页:`app/share/[id]/page.tsx`