GLSL RuntimeShader 实现的播放页音频响应式流体背景
实现方式
播放页的动态背景由 BgEffectPainter 加载 assets/shaders/hyper_background_effect.glsl 并通过 Android RuntimeShader 逐帧渲染。
着色器逻辑
hyper_background_effect.glsl 内部:
- 从当前歌曲封面提取主色调作为背景种子色
- 生成动态色块和轻量颗粒噪声层
- 叠加多个噪声层制造流体流动感
- 接入
uMusicLevel和uBeat两个 uniform,随播放音频实时响应
不是简单把封面做高斯模糊——封面模糊是独立降级路径,流体背景是独立的 GLSL 渲染。
Android 版本限制
| 效果 | 最低 Android 版本 |
|---|---|
| RuntimeShader 流体背景 | Android 13 (API 33) |
| 封面模糊 | Android 12 (API 31) |
| 进阶高级模糊 | Android 13 (API 33) |
| 高级模糊质量调节 | Android 13 (API 33) + 父级模糊开启 |
低版本系统会自动降级到封面模糊或纯色背景,不会崩溃。
封面取色的主题联动
封面取色不仅驱动播放页背景——整个应用的主题种子色也可以从当前播放歌曲的封面自动提取,并随切歌实时更新。取色使用 Android Palette 库,经过 HSL 转换调整对比度和饱和度后写入主题系统。
封面大图预览
播放页长按封面可以打开沉浸式大图预览,支持双指缩放、拖动和下载封面图片。