DLsiteFloat

DLsiteSound 悬浮窗 / 状态栏字幕模块

简体中文 | 繁體中文 | English

GitHub release GitHub downloads GitHub stars


功能特性

  • 悬浮字幕窗:在 DLsiteSound 播放页挂一个与播放进度同步的字幕窗,可拖动、可缩放。
  • 状态栏字幕:把当前字幕行镜像到系统状态栏(在 SystemUI 进程内注入)。支持单程左移滚动、实时让位时钟与通知图标区、流体云动态避让。
  • 播放页双胶囊按钮:状态栏 开 / 关 与 悬浮窗 开 / 关,随页面自动显隐;无字幕时自动置灰或隐藏。
  • 进程内悬浮窗:窗口直接挂在 DLsiteSound 进程内,与各个 Hook 共享同一份字幕数据,无需跨进程 IPC、无需独立 Service。
  • 可单独使用悬浮窗字幕:未授权 com.android.systemui 作用域时,左侧状态栏 开 / 关按钮不显示。
  • 自动抓取字幕:拦截 DLsiteSound 的网络响应自动解析字幕 JSON,不依赖 URL 关键词。
  • 换轨智能处理:切到无字幕音轨时先挂起并提示,等新音轨的字幕 JSON —— 无缓存时等 1 秒、已有缓存放宽到 15 秒,期间可提前收窗并在字幕到达后自动开回。
  • 液态玻璃:悬浮窗面板与播放页字幕按钮可切换为液态玻璃质感 —— 背景模糊交给系统合成器做,玻璃材质由模块自绘。
  • 可视化设置页:模块自带设置页,可调主字幕 / 非活动行 / 排版 / 液态玻璃等参数,改完点「保存设置」即生效。
  • 多语言支持:按系统语言取插件显示语言,支持简体中文 / 繁體中文 / English

适配范围

项目 说明
目标 App DLsiteSound(jp.co.eisys.dlsitesound)
框架 LSPosed 2.2.0+(libxposed API 102)
作用域 需勾选两个:jp.co.eisys.dlsitesound 与 com.android.systemui
Android 版本 Android 7.0(minSdk 24)起,targetSdk 34
机型 / ROM 基于 ColorOS 16/17 测试制作,其它 ROM 理论上可用

使用说明

  1. 下载模块

    从主仓库 Releases 或本仓库 Releases页面下载最新版本的 APK(通常情况下,两者更新进度一致,若不一致以主仓库为准)。

  2. 安装并启用

  • 安装 APK 到已 root 设备
  • 打开 LSPosed 管理器,找到 DLsiteFloat 模块
  • 勾选启用,作用域两个都勾:jp.co.eisys.dlsitesound + com.android.systemui
  • 强制停止 DLsiteSound,并重启 SystemUI 或重启手机
  1. 授予悬浮窗权限
  • 设置 → 应用 → DLsiteSound → 权限管理 → 特殊应用权限 → 悬浮窗
  • 设置 → 应用 → DLsiteFloat → 权限管理 → 特殊应用权限 → 悬浮窗
  1. 开始使用
  • 打开 DLsiteSound 的有字幕播放页,播放控制条上方出现两个胶囊按钮
  • 左键开关状态栏字幕,右键开关悬浮窗
  • 悬浮窗面板任意处拖动可移动,右下角手柄拖动可缩放

其他

完整说明与机制细节见主仓库:https://github.com/ariinyume/DLsiteFloat

提交 Issue:https://github.com/ariinyume/DLsiteFloat/issues

许可证:GPL-3.0-or-later

Releases

10/16/2026, 1:49:41 AM

🔧 修复

1. 关掉代理后切换音轨,本地字幕拉不起来

  • 查缓存只认「身份键」(作品 + 音轨身份);身份未知时按「找不到就放弃」处理(宁可空白,不冒险命中)。
  • 「作品键」降级为只作取证,写进日志但不再参与判定。
  • 同轨重写找「前身」改为按文件名识别,不再误摘其它音轨的条目。

2. 没有缓存的音轨显示了别的音轨的字幕

  • 去掉弱键兜底,不再有「selection-only 命中」这条路径。
  • 时间轴匹配补上反向校验:缓存条目自记的时长必须与本次请求的时长一致(此前只单向校验)。

3. 缓存格式升级

  • 索引结构由 INDEX_SCHEMA 3 升到 4;升级后本机字幕缓存会整批作废重建一次(见下方升级须知)。

⚡ 调整

「等官方字幕」的窗口由 3 秒收到 1 秒

  • 换轨后数据层先挂起、等宿主自己取回的云端字幕 JSON;窗口到点仍没等到,才回退本地磁盘缓存。
  • 不受影响的两条路径:① 盘上没有本轨缓存时走的 15 秒长窗(那条路没有本地可退,多等是对的);
    ② 完全离线(飞行模式)时直读本地。
  • 不是「本地优先」:1 秒后取本地只是「等不到就早取」,云端 JSON 到了照旧整份替换。

⚠️ 升级须知

  1. versionCode 由 1019 升到 1021:要求已装版本的 code 严格小于 1021。
    若之前装过更高 code 的包,请先卸载再装(卸载后 LSPosed 作用域需要重新勾选)。
  2. 装完请重启 SystemUI(或重启手机)。
  3. 字幕缓存会「清零」一次:本版 INDEX_SCHEMA 升到 4,旧缓存整批作废重建 ——
    设置页的占用读数会归零,把作品重新播一遍就会回来。
  4. 本地缓存字幕功能未经过长时间测试验证,不建议过于依赖该功能。

📦 产物

DLsiteFloat-2.3.3-code1021-debug.apk — 5,618,864 B
sha256 ca94d9ea6151f1bc10ca1eaed4f9a19a8b7c715b320fdafeb5e846628ea769e2
包名 io.github.ariinyume.dlsitesoundfloat;versionName 2.3.3;versionCode 1021

Assets

1

10/14/2026, 9:18:58 AM

✨ 新功能

实验性功能卡

设置页新增一张默认隐藏的卡片,用于收纳还在验证中的能力。

  • 解锁方式:在设置页连续点击「状态卡」五次(相邻两次间隔不超过 3 秒)。
  • 卡内总开关:关闭时其下子功能全部关闭、开关置灰,并清除相关缓存。
  • 卡内字幕缓存:查看占用读数、一键清除。

⚠️ 因为是默认关闭,升级到本版后字幕缓存会被自动关掉。要用的话请先按上面的方式解锁卡片、再把总闸打开。

字幕离线缓存

在线播放过的音轨,其字幕会自动缓存到本机 —— 之后断网 / 飞行模式 / 不挂代理时照常显示。

  • 只对「已经播过」的音轨生效;从没在线抓到过字幕的音轨,离线时仍然没有字幕。
  • 缓存只保存官方下发的那份字幕文本(按音轨存),不涉及任何音频内容。
  • 按「作品 + 音轨身份」存,换章节 / 换音轨 / 播放列表重建都不会串轨。
  • 超出储存上限后,按最早缓存顺序自动清除。
  • 云端优先、本地兜底:换轨后先等云端那份最新字幕,窗口内等不到(无网络 / 云端慢)才回退到本地已缓存的那份。

🔧 修复

  • 换作品 / 换章节时的短暂「无字幕」。
  • 快速换轨时字幕被标到别的音轨:落盘轨标签改用「字幕 JSON 到达那一刻的印章」,兜底读盘改用「本次换轨的目标键」。

♻️ 架构与内部整理

  • 播放页检测的两道前置闸抽成零状态纯判定层(DetectGatePolicy)。
  • 切断 util 包对数据层的反向依赖(新增 LineSource 接口 + AppEnv,5 处调用点零改动)。
  • 三处自绘视图的 dp 换算合并归口到 Utils.dip2pxF。

❌ 已知问题

  • 磁盘缓存的索引依旧有问题,每个作品第一轨 / 未缓存字幕的音轨会有串轨的情况,下版本修复。

📦 产物

DLsiteFloat-2.3.2-code1019-debug.apk — 5,616,276 B
sha256 c834bb9ba0c3d00e8c91a70f2d4af64af1f367956bfa2d667b5247ee6429e85c
包名 io.github.ariinyume.dlsitesoundfloat;versionName 2.3.2;versionCode 1019

Assets

1

10/10/2026, 5:09:49 PM

🐞 本版修了什么

1. 修复 打开(未缓存)音轨时插件无法读取到字幕

  • 新增早就能读到的「选择键」(曲目数 + 序号),不依赖时长;新轨字幕落下时同步盖章,换轨通知到达即可直接认领,不等 App 重发。
  • 新增「列表重建窗口」:旧列表消失到新列表可读之间返回的字幕 JSON,只可能属于重建后的新列表;窗口内到达即认领(两道保险:目标列表必须换了、且未超 15 秒)。
  • 更换能正面指认归属的证据 :字幕请求地址里的作品路径。同时把窗口起点改为按播放实例记账的真边沿、终点改由带时长的完整读数负责。

📖 版本信息

安装包:DLsiteFloat-2.3.1-code1006-debug.apk
版本:versionName 2.3.1 / versionCode 1006(label 1008.25)
sha256:a3e5c48c87a71f8c7ed2ec5ea7053c2e4681722ead1f363674814a37e59f0136

Assets

1

10/10/2026, 8:15:35 AM

本版把「液态玻璃」从实验档推成完整可调项。


🐞 本版修了什么

1. 增加 悬浮窗液体玻璃模式

  • 新增独立调节卡片 「液态玻璃效果调整」,摆在「其他」卡之前,顺序如下:液态玻璃(总开关)、环境背景亮度(霜面亮度来源)、通透度、明暗度、模糊强度、恢复液态玻璃默认设置;
  • 重写docs/液态玻璃实现与可调参数.md :新增「四个滑条的数值范围」与「参数之间的计算关系」(合成公式两步推导、默认档逐步实算、可压上限速查表、四个旋钮不正交的物理原因)。

2. 修复 偶发保存设置重启后新配置不生效


📖 版本信息

安装包:DLsiteFloat-2.3.0-code1003-debug.apk
版本:versionName 2.3.0 / versionCode 1003(label 1008.24)
sha256:a2013a6a6ee4783f3de1c9ba838447853e49e9ef184d5c0cc556c1fdb1e2abf8

Assets

1

10/7/2026, 3:24:23 PM

主要进行了换轨残留的根治,外加设置页观感打磨、模块激活探测修正和新的「调试日志」开关。


🐞 本版修了什么

1. 修复 换轨字幕残留

成功加载的 cues 盖一个归属印章(按播放列表身份),切回来时身份对得上就直接按当前进度恢复渲染。同时放行被 20s 静默窗挡掉的「用户切回去」这一次换轨,并让静默窗失效,避免紧接着的反向再被静默。

2. 优化 设置页UI

  • 新增「调试日志」开关(默认关):频率较高,长时间开着会淹没有用日志。现在默认只留里程碑日志(钩子挂载、种基线、真正的换轨上报 >>> track changed)与全部 WARN;排查时在设置页「其他」里打开即可。
  • 模块「未激活」误判修复:跨进程探测改为显式广播(setPackage)并重发,不再把「DLsiteSound 当前没在跑」误判成未授权。
  • 设置页观感优化:依据 MD3 设计语言完善控件呈现。

📖 版本信息

安装包:DLsiteFloat-2.2.8-code980-debug.apk
版本:versionName 2.2.8 / versionCode 980(label 1007.8)

Assets

1

10/6/2026, 7:00:34 AM

请务必升级!宿主 DLsiteSound 2.20.2 上,2.1.3 及更早版本会显示「无字幕」(R8 混淆导致采集点失效)


🐞 本版修了什么(v2.1.3 → v2.2.0)

1. 兼容 DLsitesound 2.20.2

三个采集点改为按签名形状定位,不硬编码混淆名 —— 每次发版重新生成 R8 映射表也不会失效(后续有问题再修)。

2. 修复 状态栏字幕行最后一个字为汉字时只出现一半

发现吸附只往右取「不小于终点的那个字起点」,修改方式为允许的裁切上限收紧到 4px。

3. 上线可视化设置页

基础字幕设置功能实测已跑通,UI还没修完。(因DLsitesound 2.20.2 版本更新而紧急发版,可恶捏)。


📖 版本信息

安装包:DLsiteFloat-2.2.0-code972-debug.apk
版本:versionName 2.2.0 / versionCode 972(label 1006.10)

Assets

1

9/30/2026, 11:49:38 AM

🐞 本版修了什么(v2.1.2 → v2.1.3)

1. 修复「换轨瞬间字幕突然跳成『无字幕』、悬浮窗跟着被关掉」

  • 等待判定窗 10s → 15s(冷请求实测尾部会拖到 15.6s)
  • 手上一片空白时(确实没字幕的作品)行为与旧版完全一致:照旧清空 + 关窗

2. 修复「进播放页时按钮上下小抖一下」

把快照门改成 12px 迟滞,并把两个写同一份布局参数的入口统一到同一口径(原先一个是 6px、一个是严格相等,两头都拦不住)。12px 大于 settle 抖动实测幅度,又远小于滚动跟手的真实位移(Δ444px),跟手不受影响。

3. 修复「拖动右下角手柄缩放悬浮窗时,字幕上下抖动」

把重新居中搬进「同一趟布局之后、绘制之前」的 preDraw 回调里,让「重排 → 算落点 → 绘制」落在同一帧;原来那个下一帧的任务只留作兜底(已被本帧消费时自动空转)。

4. 其它

  • 悬浮窗手势被系统打断时(ACTION_CANCEL)补一行诊断日志,方便下次取证。
  • 已实测 ColorOS 17 本插件可正常使用。

📖 版本信息

安装包:DLsiteFloat-2.1.3-code958-debug.apk
版本:versionName 2.1.3 / versionCode 958(label 0930.4)

Assets

1

9/25/2026, 2:04:09 AM

变更内容(v2.0.3 → v2.1.0)

  • 包名变更:com.sena.dlsitesoundfloat → io.github.ariinyume.dlsitesoundfloat
    • 为满足 LSPosed 官方模块仓库上架要求
    • namespace、applicationId、入口类全名、跨进程广播 action 前缀同步更新
  • versionCode 949 → 950,versionName 2.0.3 → 2.1.0

延续自 v2.0.3 的能力

  • 修复「点作品大标题回作品主页时,悬浮窗/状态栏按钮比播放页晚消失」的延迟问题。
    • 为「锚点面积归零」单开最短确认档(120ms),与拖动场景的 600ms 默认档分离
    • 归零档取消采样门槛(need=0 + needSamples=1),首次检测即收起
    • 补前置门 ANCHOR_DEAD_GONE_STILL_MS=80ms:页面须已静止才收起,避免误收

Assets

1

9/26/2026, 8:48:36 AM

🐞 本版修了什么(v2.1.0 → v2.1.2)

1. 修复「按钮偶尔会出现在非播放页」

新建按钮不再用「上次结论」预判可见性 —— 一律先 GONE,把「该不该显示」完全交给紧随其后的检测;配套让 addView 触发的首帧扫描不被 150ms 节流吃掉。

2. 修复「播放页上按钮每 ~700ms 闪一次」

「整棵树扫成空」的那一趟扫描不再当作「已离开播放页」的证据。改为 60ms 后强制补一趟快检再判:真离场只晚 60ms,退化测量则被发现、不再误收。

3. 修复「偶发按键出现的位置高度变化」

新增三道闸(「页面最近没动过」接到位移时间轴 / 候选位置连续稳住 400ms / 偏置量级闸 64dp)+ stale bias healed 自愈。

4. 🆕 多语言支持

支持 简体中文 / 繁体中文 / 英文 文字显示。语言判定走系统配置,进程内只判一次。

5. 锁死按钮大小与文字大小

现在胶囊的宽高、圆角、文字、各段偏移都只按「首次锁定的密度」计算,此后无论后端怎么重锁、或用户改系统「显示大小」,都不再变;文字改为固定 px 并按胶囊可用宽度自动适配。

6. 其它调整

  • 单个胶囊宽 75dp → 85dp(给英文版本留宽)。
  • 切到无字幕音轨后,悬浮窗挂着「无字幕」占位的时长 4s → 5s,延迟网络加载速度不佳时窗口自动关闭的时间。

📖 版本信息

安装包:DLsiteFloat-2.1.2-debug.apk
版本:versionName 2.1.2 / versionCode 954(label 0926.3)

Assets

1