当前 spectrum-visualizer 能力仅支持 4 种频谱效果,且效果切换与效果渲染逻辑耦合较高。此次变更需要在不破坏现有 4 种效果体验的前提下,扩展可选效果数量,并保证播放中实时切换稳定、渲染性能可控、用户上次选择可恢复。
约束条件:
entry/src/main/ets/view/ 与 entry/src/main/ets/viewmodel/。Goals:
Non-Goals:
switch/case 扩展。effectId、展示名、参数默认值、渲染函数引用、性能等级)。不采用原因:分支增长会快速增加维护成本,且难以统一做性能控制。
采用“共享数据输入 + 效果独立渲染器”的分层。
方案:FFT/幅值数据由现有链路统一提供,不同效果仅消费标准化频谱帧。
原因:避免每个效果重复处理原始数据,降低行为不一致风险。
备选方案:每个效果自行拉取并处理数据。
不采用原因:会造成重复计算和状态分散,切换时更易出现抖动。
增加效果状态持久化字段并设置兼容回退。
方案:保存 selectedEffectId;启动时若配置不存在或无效,回退到历史默认效果。
原因:保障升级后配置兼容,避免因效果下线或重命名导致页面异常。
备选方案:不持久化,每次启动使用默认效果。
不采用原因:用户体验不稳定,无法满足“记忆和恢复”目标。
引入统一性能守卫。
方案:按效果定义最大刷新率与采样点上限,在帧耗时过高时触发降级(降低刷新率/简化细节)。
原因:新增效果后,性能风险主要来自复杂绘制路径;统一守卫可避免逐个临时修补。
备选方案:仅做人工测试,不加运行时守卫。
不采用原因:设备差异大,纯人工验证无法覆盖全部场景。
selectedEffectId 为真源)。selectedEffectId 持久化与启动恢复逻辑。回滚策略:
selectedSpectrumEffectId 持久化与兼容回退。