## Why 当前播放界面仅有旋转唱片和歌词两个视图,缺乏对音频本身节奏韵律的可视化表达。添加基于 FFT(快速傅立叶变换)的实时频谱动画,可以让用户直观感受音频的频率分布和节奏变化,同时为播放界面增加丰富的视觉吸引力。多种可切换的频谱特效(柱状图、波形、粒子等)能满足不同用户的审美偏好。 ## What Changes - 在 ijkplayer 原生层(C/NAPI)拦截 `AudioRendererOnWriteData` 回调中的 PCM 数据,通过环形缓冲区暴露给 ArkTS 层 - 新增 NAPI 接口,ArkTS 侧可按需获取当前 PCM 帧数据 - 在 ArkTS 侧实现 FFT 算法,将时域 PCM 数据转换为频域频谱数据 - 新增频谱可视化组件,使用 Canvas 绘制多种实时频谱动画特效: - **柱状频谱**:经典的频率柱状条跳动 - **波形频谱**:平滑曲线展示频率变化 - **圆形频谱**:环形排列的频谱条,围绕封面旋转 - **粒子频谱**:根据频率驱动粒子的颜色、大小和运动轨迹 - 所有特效的颜色、亮度、大小、动画速度均由实时频谱数据驱动 - 在播放界面 Swiper 中新增频谱页面,用户可左右滑动切换(封面 / 频谱 / 歌词) - 新增频谱特效切换 UI,支持在多种特效间切换 - 频谱动画仅在播放状态下运行,暂停/停止时冻结或隐藏 ## Capabilities ### New Capabilities - `audio-pcm-bridge`: 从 ijkplayer 原生音频管线中提取实时 PCM 数据,通过 NAPI 环形缓冲区桥接到 ArkTS 层 - `fft-analyzer`: ArkTS 侧的 FFT 频谱分析模块,将 PCM 时域数据转换为频域频谱数据,提供平滑、分频段等处理 - `spectrum-visualizer`: 基于 Canvas 的多特效频谱可视化组件,支持柱状、波形、圆形、粒子等多种动画模式,所有动效参数由频谱数据实时驱动 ### Modified Capabilities (无已有 spec 需要修改) ## Impact - **ijkplayer 原生层**:修改 `ijksdl_aout_android_opensles.c` 中的 `AudioRendererOnWriteData`,在均衡器处理后拷贝 PCM 数据到环形缓冲区;新增 NAPI 导出函数 - **entry 模块**:新增 FFT 分析工具类、频谱可视化视图组件;修改 `LocalMusic.ets` 的 Swiper 容器以接入新的频谱页面 - **性能影响**:FFT 计算和 Canvas 绑帧渲染会增加 CPU/GPU 开销,需要控制采样率和绘制频率(目标 30-60fps) - **依赖**:无新外部依赖,FFT 算法自行实现(Cooley-Tukey 基2算法),Canvas 为 ArkUI 内置能力