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