让 HyperOS 音乐超级岛的波形,跟着你正在听的歌跳动。
HyperWave 是一个 LSPosed 模块,把音乐超级岛右侧的预制动画换成音频驱动的实时频谱。
- 真实频谱:48 kHz 系统级回环采集,Rust FFT 分析,六频段实时映射到柱高
- 三种外观:iOS 六柱、HyperOS 原生五柱,以及结合六柱几何与 HyperOS 渐变的 MiOS,实时切换无需重启
- 切歌封面翻转:左侧封面弹簧 3D 翻转,适用于全部外观,可单独关闭
- 原生交互不变:岛容器、点击行为与封面的解码、调色、圆角均沿用 HyperOS
- HyperOS + LSPosed,Xposed API 102
- 作用域:系统界面(
com.android.systemui)与系统框架(system)
已验证环境(均为 Android 17,arm64):
- Xiaomi 17 Pro 真机,HyperOS
OS4.0.4.0.XBLCNXM hongkongAVD,HyperOSOS4.0.24.0.XFRCNXM
其他版本尚未验证,欢迎反馈。
- 从 Releases 下载 APK 并安装
- 在 LSPosed 中启用 HyperWave,勾选系统界面与系统框架(标识为
system,不是android) - 重启设备
- 播放音乐并回到桌面,波形开始跟随音频
打开 HyperWave 可切换外观、调整频谱高度(50%–200%,默认 150%)、开关封面翻转,设置实时生效。隐藏桌面入口后,可从 LSPosed 模块页面进入设置。
更新:框架支持 API 102 热重载时,覆盖安装新版即可生效,无需重启;否则仍需重启设备。停用或卸载模块后也需要重启。详见 热重载说明。
- 声明完全禁止采集(
ALLOW_CAPTURE_BY_NONE)的播放器无法获取音频,柱子会保持低位 - 按 UID 过滤采集,同一 UID 下的多路媒体流会被合并;蓝牙、投屏、多用户等场景未充分测试
- DSP 运行在 SystemUI 进程内
完整说明见 兼容性与限制。
需要 JDK 21、Android SDK 37、Android NDK 30.0.15729638、Rust stable。
rustup target add aarch64-linux-android
cargo test --locked -p hyperwave-dsp
# macOS, if the default Java is not JDK 21:
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
export ANDROID_HOME="$HOME/Library/Android/sdk"
./gradlew :app:testDebugUnitTest :app:assembleDebug :app:lintDebugGradle 会自动调用 scripts/build-rust.sh 把 Rust .so 打进 APK。NDK 路径可用 ANDROID_NDK_HOME 指定,SDK 用 ANDROID_SDK_ROOT 或 ANDROID_HOME。产物位于 app/build/outputs/apk/debug/app-debug.apk。
音乐播放 → UID 过滤的 AudioRecord 回环 → Rust FFT → 六柱值 → Canvas 绘制
Android 接入层使用 Kotlin,基于 libxposed API 102;DSP 使用 Rust,通过 JNI 调用。
app/ Android app, Xposed entry, capture and renderer
dsp/ Rust DSP, JNI entry and numerical reference tests
scripts/ Native build script
docs/ Architecture, compatibility and validation records
- architecture.md — 音频链路、Hook 设计、DSP 与三种外观的绘制
- hot-reload.md — API 102 热重载与升级
- artwork-flip.md — 封面翻转的事件、参数与宿主接入
- compatibility.md — 已验证环境与兼容性边界
- validation.md — 验证结论、golden vectors 与日志抓取
- performance-validation.md — 性能实测与复现命令