Skip to content

Releases

RGBBeat v2.2.2 - 修复特效遮挡触摸

Choose a tag to compare

@wumisc wumisc released this 08 Nov 13:58

RGBBeat v2.2.2 — 修复「特效一出来就点不动」

⚠️ 本 APK 为 debug 签名(工程未配置 release keystore)。若你安装的是官方 release 签名版本,需先卸载再安装。

如果你还停在 v2.2.0:那个版本有严重问题(特效播放时整机触摸失效),请务必升级。

本次修复(v2.2.0 → v2.2.2)

1. 触摸失效:换了整个渲染层

  • v2.2.0 事故:EffectGlSurfaceView 用了 setZOrderOnTop(true),把 Surface 提升为窗口之外的独立顶层并铺满全屏,部分 ROM 把它当全局输入层 → 整机点不动,只能灭屏/重启。
  • v2.2.1:去掉 setZOrderOnTop 后,「整机卡死」变成「能切后台,但桌面和 App 仍点不了」——因为 GLSurfaceView 底层是 SurfaceView,它在窗口里仍然会创建独立图层,某些 ROM 把它当作遮挡层挡住下层应用的触摸(系统窗口如状态栏、手势导航不受影响)。窗口自身的 FLAG_NOT_TOUCHABLE 对这种图层无效。
  • v2.2.2(本版):删除 EffectGlSurfaceView,改为 EffectVideoView extends TextureView + 自建 EGL:
    MediaPlayer → SurfaceTexture(OES) → EGL 上下文 → 同一套抠背景/染色着色器 → 直接画进 TextureView 的 BufferQueue。
    TextureView 是普通 View,随窗口一起合成,不产生任何独立图层,从根本上不可能遮挡触摸。

2. 播放状态机加固

  • 新增 6 秒 prepare 看门狗:解码器迟迟不回调 onPrepared/onError 时强制复位,避免 playing 永久为 true 导致特效再也不触发。
  • 新增 播放时长兜底硬停(duration + 1.5s):即使 onCompletion 不回调,特效层也一定会被清掉,不会滞留遮挡。
  • lastHighlightTrigger 初值改为 -COOLDOWN,修复开机 12 秒内第一拍被冷却吞掉。

v2.2.0 起已包含的礼物特效改造(本版一并保留)

  • 自适应抠背景:片元着色器按「局部对比度 + 彩度」判断前景,平滑的黑/白/灰/渐变底一律变全透明,线条、粒子、星点、彩色流光保留;上下边缘 8% 羽化,消除视频矩形硬边。
  • 等比居中:EffectLayout.fit() 按素材原始宽高比 FIT_CENTER,横屏素材(1568×720 / 992×720 / 896×528)完整呈现、不裁切、不拉伸。
  • 统一染色:EffectTint,默认白里粉 #FFB7D8(亮部收白芯、中间调透粉),另有心形粉/玫瑰紫/极光青/深海蓝/鎏金橙/荧光绿/中国红/素材原色。
  • 可调选项:「背景抠除模式」自动 / 纯黑底 / 浅色·白底 / 不抠(排查用),切换后立即重绘,播放中也生效。
  • 素材兼容:三段 mp4 由 HEVC(hvc1)、moov 在文件尾,转为 H.264 Main / yuv420p / moov 前置 / 无音轨,兼容 Android 8.0+ 硬解。
  • 其他修复:TextureView GONE 拿不到 Surface、stop() 重置轮播索引导致只播第一段、设置页写 <包名>_preferences 与服务读 rgbbeat 不通、震动忽略用户开关等。

验证

  • JDK 21 + Gradle 8.14 + Android SDK 35:assembleDebug + testDebugUnitTest BUILD SUCCESSFUL。
  • 45 个 JVM 单元测试全部通过(EffectLayoutTest / EffectKeyModeTest / EffectPickerTest / EffectTintTest / 渲染稳定性等)。
  • 真机验证:特效播放期间桌面图标、设置页均可正常点击(v2.2.0/2.2.1 均失败,2.2.2 通过)。

安装

  1. Android 8.0+,授予悬浮窗权限;LSPosed 勾选启用并重启。
  2. 直接覆盖安装本 APK(versionCode 15 > v2.2.0 的 13)。
  3. 首页「立即预览礼物特效」验证效果;正常使用可开「音乐高潮自动播放」。

已知限制

  • 色键阈值在 EffectVideoView.FRAGMENT_SHADER(sstep(0.025, 0.14, edge) / sstep(0.05, 0.22, chroma)),不同设备观感可微调。
  • 三段 mp4 无 alpha 通道,靠着色器抠背景;纯白界面上的高光会偏淡。
  • 晕车(motion)模式没有音频输入、beatSeq 不递增,礼物特效不会自动触发(手动预览不受影响)。

RGBBeat v2.2.0 - 礼物特效修复版

Choose a tag to compare

@wumisc wumisc released this 08 Nov 13:03

⚠️ 此版本存在严重问题:礼物特效播放时,桌面与本 App 的触摸会被遮挡层挡住(v2.2.0 / v2.2.1 均受影响)。请升级到 v2.2.2。

RGBBeat v2.2.0 — 礼物特效修复版

本版本按维护者要求用修复版覆盖旧代码基线。v2.1.0 的液态玻璃导航栏、Gradle 9.3 / AGP 9.1 工具链与音效相关改动在本版本中不再包含;versionCode 13 > v2.1.0 的 12。

⚠️ 本 APK 为 debug 签名(工程未配置 release keystore)。若你安装的是官方 release 签名版本,需先卸载再安装,签名不一致无法直接覆盖。

礼物特效:居中、透明、完整呈现

  • 新增 EffectGlSurfaceView:GLSurfaceView + OES 外部纹理,片元着色器做自适应背景抠除(局部对比度 + 彩度)。黑 / 白 / 灰 / 渐变底一律变全透明,只保留线条、粒子、星点与彩色流光;视频上下边缘羽化,消除底部雾状硬边。
  • 新增 EffectLayout:按素材原始宽高比 FIT_CENTER 居中,横屏素材(1568×720 / 992×720 / 896×528)完整呈现、不裁切、不拉伸。
  • 新增 EffectKeyMode 与设置项「背景抠除模式」:自动(默认)/ 纯黑底 / 浅色·白底 / 不抠(排查用),切换后立即重绘,正在播放也生效。
  • 新增 EffectTint 与设置项「礼物特效颜色」:三段素材统一染色,默认白里粉 #FFB7D8(亮部收成白芯、中间调透粉),按亮度调制保留层次;可选心形粉 #FF29B7 / 玫瑰紫 / 极光青 / 深海蓝 / 鎏金橙 / 荧光绿 / 中国红 / 素材原色。解决白色线条在浅色界面上不明显、三段颜色不统一的问题。旧版保存过默认「心形粉」的会被一次性迁移到白里粉。
  • 修复 TextureView 初始 GONE 导致系统不创建 SurfaceTexture、视频永远播不出来;改为始终 VISIBLE 的 GL Surface + ready 回调补播。
  • 修复 stop() 把轮播索引重置为 -1,导致三段视频永远只播第一段;抽出 EffectPicker 并加回归测试。
  • 修复用只持续一帧的 state.beat 做触发条件导致漏触发;改用 BeatState.beatSeq 单调序号做边沿检测,冷却 12s 防刷屏。
  • 震动改为遵循用户开关与强度;补 onError 复位、Surface/MediaPlayer 成对释放、服务/窗口销毁时完整 release()。

一轮逻辑复查后补的两处修复

  • 播放状态机可能卡死:prepareAsync() 之后如果解码器迟迟不回调 onPrepared/onError(部分 ROM 上 Surface 中途重建、或素材解码器初始化失败时会出现),playing 会永久为 true,LightRenderer 的「未在播放」判断从此恒假,礼物特效再也触发不出来。新增 6 秒 prepare 看门狗:超时未真正开播就 stop() 复位,并把「已开播」与「准备中」拆成 startedPlaying 两个状态。
  • 开机后前 12 秒不触发:lastHighlightTrigger 初值为 0,而冷却判断用 elapsedRealtime(),开机不足 12 秒时第一拍会被冷却挡掉。初值改为 -HIGHLIGHT_COOLDOWN,首次命中立即生效。

设置与工程链路

  • 关键修复:设置页写 <包名>_preferences,服务与首页读 rgbbeat,两个文件不通,所有设置(含礼物特效开关)改了都不生效;已统一为 rgbbeat 并自动迁移旧值。
  • 补齐设置页与首页的特效开关、特效选择、「立即预览礼物特效」。
  • 恢复被误删的 build.gradle / settings.gradle / app/build.gradle。
  • 恢复被整段注释掉的 3D 粒子绘制(默认仍关闭)。
  • 修正单测仍用旧构造函数签名、SeekBar 默认值与 Prefs 不一致等编译/行为问题。
  • 三段素材由 HEVC(hvc1)、moov 在文件尾,转为 H.264 Main / yuv420p / moov 前置 / 无音轨,兼容 Android 8.0+ 硬解;原始 HEVC 素材保留在源码包 original-hevc-mp4/。

验证

  • 真实构建:JDK 21 + Gradle 8.14 + Android SDK 35,clean assembleDebug testDebugUnitTest BUILD SUCCESSFUL。
  • 45 个 JVM 单元测试全部通过,0 失败(含新增 EffectKeyModeTest / EffectLayoutTest / EffectPickerTest / EffectTintTest)。
  • 19 个 XML 与资源引用一致性校验 0 错误。

安装与使用

  1. Android 8.0+,授予悬浮窗权限;LSPosed 模块需勾选启用并重启。
  2. 安装本 Release 的 APK(debug 签名;与官方 release 签名不同时需先卸载)。
  3. 开启服务 → 首页「立即预览礼物特效」即可验证。
  4. 若换了素材仍有雾状残留:设置 → 高潮礼物特效 → 背景抠除模式,切到对应底色模式。

仓库变更

  • README 全面重写:补充礼物特效渲染原理(解码 → OES 纹理 → 自适应抠背景 → FIT_CENTER → 染色 → 预乘 alpha 合成)、特效相关设置项、故障排查(prepare timeout / 只播第一段 / 底部灰雾 / motion 模式不触发)、工程结构更新到当前全部类;许可证更正为 AGPL-3.0(与仓库 LICENSE 一致,原文误写为 GPL-3.0)。
  • 新增 Gradle Wrapper(gradlew / gradlew.bat / gradle/wrapper/*,Gradle 8.14),可直接 ./gradlew assembleDebug。
  • 删除旧实现文件:main 分支上的 8 个液态玻璃 Kotlin 文件已移除(见上),仓库内容替换为本版本源码。

与 v2.1.0 的具体差异(覆盖前请确认)

  • 远端 HighlightEffectsRenderer 仍是 TextureView GONE + stop() 重置轮播索引的旧实现(视频依旧播不出来、只播第一段),本版本整体重写。
  • 覆盖后 main 上不再有 8 个液态玻璃相关 Kotlin 文件:LiquidBottomTab.kt / LiquidBottomTabs.kt / MainNav.kt 及 com.kyant.backdrop 下 5 个 utils 文件;Gradle 9.3 / AGP 9.1 / Kotlin Compose 工具链也回退到 Gradle 8.14 / AGP 8.5.2 / 纯 Java。
  • 远端最后一次提交把礼物特效触发条件改成 energy > 0.1 + 5s 冷却(去掉 beat 条件);本版本用的是 BeatState.beatSeq 节拍边沿 + 12s 冷却。若希望保留「只要有能量就触发」,把 LightRenderer 的触发判断改为「能量阈值 或 节拍边沿」即可。
  • 提交历史不会丢:发布脚本以远端当前 HEAD 作为新提交的 parent,代码内容被覆盖、历史保留。

已知限制

  • GL 色键在运行时编译,阈值位于 EffectGlSurfaceView.FRAGMENT_SHADER(sstep(0.025, 0.14, edge) / sstep(0.05, 0.22, chroma)),不同设备观感可能需要微调。
  • 三段 mp4 无 alpha 通道,靠着色器抠背景;纯白界面上的白色线条对比度会偏低。
  • 触发条件仍是「节拍命中」。晕车(motion)模式没有音频输入,beatSeq 不递增,因此该模式下礼物特效不会自动触发(手动预览不受影响)。如需该模式也播放,把 LightRenderer 的触发条件改成「节拍边沿 或 能量超过阈值」即可。

RGBBeat v2.1.0 - 液态玻璃导航栏版

Choose a tag to compare

@wumisc wumisc released this 04 Nov 09:52

更新内容

  • ✅ 集成真正的液态玻璃导航栏(Kyant0/AndroidLiquidGlass 同款 LiquidBottomTabs)
  • ✅ 升级工具链:Gradle 9.3 + AGP 9.1 + JDK 21 + compileSdk 37
  • ✅ 特效触发阈值从 0.35 降到 0.1,更容易触发
  • ✅ 支持拖拽滑动切换 tab、交互高光、Lens 折射等特效

安装说明

  1. 下载 app-debug.apk
  2. 安装后在 LSPosed 中启用模块
  3. 勾选作用域(SystemUI 或其他目标应用)

RGBBeat 1.8

Choose a tag to compare

@wumisc wumisc released this 28 Oct 02:45

RGBBeat 1.8 — 3D 粒子氛围引擎

这次把"Python 粒子玫瑰"式特效移植成本地 3D 粒子引擎(纯 Java/Canvas,无 Python 运行时),主打:中央 3D 主角 + 两侧流光 + 粒子雨/炸开,随歌曲切换形态与配色。

新增

  • Particle3DEngine:纯 Java 3D 粒子引擎,多形状变形 + 粒子雨/高音炸开,节电自动降粒子数
  • 换歌循环 6 形态:五瓣玫瑰 → 爱心 → 五角星 → 八分音符 → 菱形 → 歌手名点阵
  • 随歌曲换色:自动模式按调色板循环换色(粉→红→橙→绿→青→蓝→紫→黄)
  • 两侧 3D 流光跟随人声高低:高音流快、低音流慢
  • 设置页新增「3D 粒子氛围引擎」开关 + 高画质/节电档位

修复

  • 节拍误触发:新增绝对最小能量门槛(energyFloor),过滤静音/系统 UI 声误判

稳定性:28 例单元测试全绿

致谢:感谢 morph-particles 等开源粒子项目的启发(详见 README)

RGBbast v1.8

RGBbast v1.8 Pre-release
Pre-release

Choose a tag to compare

@wumisc wumisc released this 26 Oct 12:14

① 音乐识别黑名单

  • 设置页新增「音乐识别黑名单」入口 → 打开应用列表多选。
    ​
  • 黑名单内的应用(视频/直播等)在前台时,不触发音乐光效(打车/运动仍正常)。
    ​
  • 用法:把你放视频的那个 App 勾进黑名单,之后在它里面放带背景音乐的剧集,光效就不会误触发了。

② 关于页寄语
"关于"卡片底部加了一行(原话一字不差):

我希望我们能够改变一下这个世界,哪怕只有一点点,诸君共勉