Releases: dhy0302/AutoLyrics
Release list
AutoLyrics 1.13.9 (build 51)
AutoLyrics 1.13.9 · build 51
本次更新
优化
-
取词速度:三个歌词源并发检索
三个源原本一个搜完再搜下一个,而它们互不依赖。最坏情形(繁体歌名 +
网易云首个域名不通)是「繁简 × 三源」六段等待相加;改成并发后取
「最长的一段」。实测正常情况下取词耗时可从 2~4 秒降到 1 秒以内。 -
繁简双路改为并发
歌名含繁体字时(绝大多数中文歌名都含),原本要搜两遍——原词一遍、
简体副本一遍,且是串行。现在两遍同时发出。歌名本来就是简体或纯英文时只有一个变体,不付并发开销,行为完全不变。
-
酷狗的FileHash 查询改为并发
搜到候选后要为前 3 个各查一次 FileHash 换取歌词 id,这三跳互不依赖,
串行等于白等三倍时间。 -
酷狗 FileHash 映射加内存缓存
FileHash 是音频指纹,永久唯一,同一首歌在任何时候查到的歌词 id 与
accesskey 都一样。而此前每次切歌都要把那3 跳网络重做一遍。现在命中缓存时完全不发请求——重播同一首歌能省掉 3 跳。
缓存容量 512 首(LRU,约 150 字节/首)。只缓存成功结果:失败多半是
网络抖动,缓存下来会把瞬时故障固化成「这首歌没有词元」。
改变
-
负缓存判定由「任一源失败」改为「全部源失败」
串行时那条「任一失败即失败」碰巧是对的——只要有一个源成功给出结果
就会直接返回,那个标记根本用不上。并发后必须改:假设酷狗与 Lrclib 正常返回「没有」而网易云超时,
旧判定会给这次结果打上失败标记,于是不写负缓存——明明网络大体可用,
却让这首歌每次切歌都重新联网三个源,白白浪费流量。改为「全部失败」后这种情况能正常写负缓存。而三源全断时行为与旧版
完全一致(仍然不写负缓存,下次重试),不会把「没查成」固化成
「没有歌词」。匹配结果完全不变——并发只改变等待方式,不改变比对顺序:
候选池仍按用户设定的源顺序排列,八轮递降的判定逻辑一字未动。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.13.9 |
| 构建号 | 51 |
| Commit | 6c385ee |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.13.9-build51-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.13.8 (build 50)
AutoLyrics 1.13.8 · build 50
本次更新
改变
-
歌词匹配改为八轮递降阈值
取词不再用单一的 0.55 门槛,而是按八档阈值从高到低逐轮放宽:
1.00 → 0.97 → 0.95 → 0.90 → 0.85 → 0.80 → 0.75 → 0.70
每一轮都从第一个源重新扫一遍,任一轮命中即返回;八轮都空才提示「暂无匹配到歌词」。
-
匹配优先级从「源顺序」翻转成「分数」
以前是「源优先级绝对」:酷狗有 0.60 的结果就直接用,网易云有 0.99 的结果根本不看。
现在是「全局最高分优先,同分时靠前的源优先」。 -
候选只检索一次
第一轮就把三个源的搜索结果与得分全部记下来,后面七轮只拿这份缓存比对,
不再重复发网络请求。酷狗一次检索要走「歌曲库 → 补 hash → 取 krcs 元」三跳,
八轮各搜一次是二十四跳;现在恒定只搜一次。
说明
- 评分权重没有改动(仍是歌名 0.55 / 歌手 0.25 / 时长 0.20),
只有匹配结构变了。 - 1.00 与 0.97 这两档在真实场景里极少命中:时长项差5 秒就掉到 0.85,
满分要求歌名、歌手、时长三项全对。但保留它们是对的 —— 一旦日后调过权重
让满分变得可达,这里无需再改结构;而因为候选只检索一次,
空转一轮的代价只是几次内存比对,不产生任何网络请求。 - 歌词源的数量与顺序完全没动,仍是酷狗 → 网易云 → Lrclib(海外兜底),
用户在设置里的自定义排序照旧生效。 - 同一个候选只会被取词一次:某一轮判「仅占位歌词」后,后面几轮不会再试它。
- 调试页文案同步更新,且阈值数字改为从代码读取,日后调档位不会文案与逻辑脱节。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.13.8 |
| 构建号 | 50 |
| Commit | 47f948b |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.13.8-build50-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.13.7 (build 49)
AutoLyrics 1.13.7 · build 49
本次更新
修复
-
歌曲信息块不再贴着状态栏
App 内播放页顶部的歌名 / 歌手那一块,往下让了 12dp,不再紧贴状态栏下沿。
这是 v1.12.9 撤掉顶部 38dp 顶栏时留下的后遗症:顶栏一撤,歌曲信息块
跟着上移到了约 39dp,而它上方只剩状态栏安全区,等于贴着状态栏站。
说明
- 顶部留白加在整页Column 的开头,而不是歌曲信息块自身 —— 权限卡片与
重取提示出现时排在更上面,加在开头才能一并让位。 - 歌词高亮行的位置不受影响:它的对齐基准是「窗口高度的 7/16」,
与视口顶部位置无关,所以视口下移多少,高亮行在屏幕上就原地不动。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.13.7 |
| 构建号 | 49 |
| Commit | 676d260 |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.13.7-build49-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.13.6 (build 48)
AutoLyrics 1.13.6 · build 48
本次更新
新增
-
关于页可检测更新
「应用版本」那一行最右端新增「检测更新」,点一下会去查官方最新发行版
并与本机比对,结果用对话框告知:情况 提示 本机就是最新 你的已经是最新版本啦 (^▽^) 官方有新版 检测到已有新版本,请前往下载更新(•﹏•)(附「前往下载」按钮) 本机更新 貌似你的Auto Lyrics版本已经领先官方发行版本了呢⊙ω⊙? 没查成 检测失败,请检查网络后重试 有新版时对话框里会附上官方版本号(如
1.14.0(49)),方便判断要不要升。
检测期间入口显示「检测中…」并禁用,防止连点重复打接口。 -
仓库地址不再写死在代码里
原来它是
AboutPage.kt顶部的一个常量,现在挪进
res/values/strings.xml的repo_url。「GitHub」行、开源许可页、
检测更新三处共用同一份定义,将来换仓库只改 XML 一处。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.13.6 |
| 构建号 | 48 |
| Commit | 7c36cbb |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.13.6-build48-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.13.5 (build 47)
AutoLyrics 1.13.5 · build 47
本次更新
修复
-
调色板的「取消」现在真的会取消
之前在设置页点「取消」完全没有反应 —— 那里传的是空函数,
而颜色只在点「确定」时才写回设置,所以拖了半天色轮,
想反悔却只能一条条拖回去,或者直接离开页面把改动丢掉。现在的行为:
当前状态 点「取消」 没动过(没输 RGB、没拖色轮) 什么都不发生 动过 颜色与 RGB 数值一起回到打开面板时的样子 刚还原完 什么都不发生(不会一路往回退) 桌面悬浮窗上的「取消」仍兼作收起面板——那里面板是弹出来的,
需要一个收起方式;还原逻辑对它同样生效。 -
选好的颜色不会再因为「关得太快」丢掉
设置写盘有 300 毫秒防抖(为的是拖校准滑块时不反复写磁盘),
但选色这种一年未必改一次的改动也走了同一条路,
于是留下一个真实的丢失窗口:选完色 300 毫秒内进程被回收,重开就退回去了。新增「改完立刻落盘」的写法,五处改颜色的地方(两处色轮的确定、
两排预设色块、悬浮窗取色)都改用它。颜色宁可多写一次磁盘,也不能丢。颜色本来就已经被持久化(
textColor/inAppTextColor两个键),
关掉 App 再打开会沿用上次的结果,这次是把那个 300 毫秒的窗口也补上。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.13.5 |
| 构建号 | 47 |
| Commit | 1224588 |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.13.5-build47-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.13.0 (build 46)
AutoLyrics 1.13.0 · build 46
本次更新
调整
-
色轮调色板:十六进制改为 RGB 读数,并支持手动输入数值
预览色块旁边原先显示
0xDC8253C3(ARGB 十六进制)。
这串数字是给机器看的:既判断不出「这是不是我要的颜色」,也没法照着微调。现在改为
RGB 130, 83, 195—— 三个十进制分量,普通用户能直接对上号。另外新增三个输入框(R / G / B),可直接键入数值:
位置 RGB 读数 手动输入 设置 → 歌词页 → 歌词颜色 ✅ ✅ 设置 → 悬浮窗 → 字体颜色 ✅ ✅ 桌面悬浮窗上的色轮 ✅ ❌ 见下 桌面悬浮窗那个色轮只做读数、不放输入框:悬浮窗是
FLAG_NOT_FOCUSABLE窗口(不抢焦点、不拦截背后 App 的操作),
收不到键盘输入,摆了输入框也点不出键盘。要手输请到
「设置 → 悬浮窗 → 字体颜色」。输入规则:只接受数字、最多三位、超过 255 自动压到 255;
三项都合法时才生效,缺项/越界时保持原色不动
(避免只改 R 时把 G 当 0 处理,颜色突然跳变)。
输入 RGB 不会改动透明度——它由棋盘格那根条独立控制。 -
桌面悬浮窗色轮与设置页双向同步
两处本来就读写同一个设置项,但面板内部状态不会跟随外部变化更新,
导致:在设置页点旁边的预设色块 → 颜色已经变了,
但色轮和读数还停在旧值 → 这时点「确定」会把颜色改回去。现在外部值变化时面板整体重置,三处显示始终一致。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.13.0 |
| 构建号 | 46 |
| Commit | d5f4228 |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.13.0-build46-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.12.9 (build 45)
AutoLyrics 1.12.9 · build 45
本次更新
修复
-
歌名与「重取」的对齐不再受「歌词源」那行影响
上一版把歌曲信息那一行改成居中对齐后有个副作用:右侧竖列(重取 + 精简切换)
比左侧文字列高,一旦「歌词源」那行不显示(还没取到词时正好没有),
左列变矮、被垂直居中后歌名就往下掉约 6dp,与「重取」错开 ——
而没取到词恰恰是最需要点「重取」的时候。现在整行改为顶对齐:左侧首行(歌名)永远贴着行顶,
与右上角「重取」的对齐关系不再受左列行数影响。
说明
- 上一版更新日志里「重取下移」的说法不准确,已更正:
「重取」本来就在顶栏右端,顶栏撤掉后下面一行顶上来,
它的屏幕位置几乎没变(约 43dp → 40dp)。
真正在动的是歌曲信息块 —— 整块上提,歌名从约 99dp 提到约 39dp。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.12.9 |
| 构建号 | 45 |
| Commit | 2a25714 |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.12.9-build45-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.12.9 (build 44)
AutoLyrics 1.12.9 · build 44
本次更新
调整
-
歌词页顶部精简:去掉「正在播放」与右上角设置入口
歌曲信息那一行左移上提后,原来那条 38dp 的顶栏就空出来了:
- 居中的「正在播放」是纯装饰文案,不提供任何操作 —— 去掉(它只是复述
屏幕上本来就有的信息,还占着一整行高度)。 - 右上角那个滑块设置入口与右下角「设置」按钮功能重复 —— 去掉。
歌词页设置仍可从「设置 → 歌词页」进入。
- 居中的「正在播放」是纯装饰文案,不提供任何操作 —— 去掉(它只是复述
-
「重取」移到原设置入口的位置,与歌名同一水平线
「重取」没有跟着删。取词出错时它是唯一的补救入口,
所以保留下移,放到原设置入口所在的右上角,并与左侧歌名对齐成一行。右侧从此是上下两枚:上面「重取」、下面精简切换
(与原布局「设置入口在 ⋮ 正上方」的排布一致)。 -
高亮行由屏幕正中上移到约 7/16 处
原来高亮行对齐屏幕垂直中线(8/16),实测偏下 ——
上方要放歌曲信息与「上一句」,下方只有「下一句」,
视觉重量天然偏上,正中反而显得这一行被压在下半屏。现在上移到屏幕从上往下 7/16(约 43.8%)的位置,
上方留 7 份、下方留 9 份。普通模式与精简模式同时生效。歌曲信息整体上移后腾出的高度归歌词区,
可见歌词比原来多出约一行半,填补了上移留下的空间。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.12.9 |
| 构建号 | 44 |
| Commit | 445983b |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.12.9-build44-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.12.8 (build 43)
AutoLyrics 1.12.8 · build 43
本次更新
调整
-
通知栏歌词新增「透明背景」开关
通知栏那条通知下面现在有两个按钮:
按钮 当前状态 → 显示文案 悬浮窗开关 开着 →「关闭桌面歌词」/关着 →「开启桌面歌词」 透明背景 不透明 →「歌词背景透明」/透明 →「歌词背景不透明」 文案写的都是「点一下会发生什么」,不用先判断现在是什么状态。
透明背景与设置页的「透明背景」是同一个开关,两边状态同步。两个按钮都走广播,所以悬浮窗被锁定(点不动、拖不了)时照样能调,
等于把通知栏当成悬浮窗的遥控器。 -
悬浮窗开关的按钮文案去掉「悬浮窗」三字,由
「关闭/打开桌面歌词悬浮窗」改为「关闭/开启桌面歌词」。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.12.8 |
| 构建号 | 43 |
| Commit | 023ac1b |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.12.8-build43-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限
AutoLyrics 1.12.7 (build 42)
AutoLyrics 1.12.7 · build 42
本次更新
修复
-
彻底修复「锁屏切歌后歌词丢失」
现象:黑屏锁屏期间切歌,亮屏后歌词页显示
「没找到歌词,去「歌词源」页可手动排查」,悬浮窗也一起空掉;
手动点「重取」又总能正常拿到。根因:歌词源把「网络失败」误报成了「没有这首歌」。
每层实现都写了
catch (_: Throwable) { null } ?: return emptyList()
—— 熄屏时 Android 会限制网络,请求直接失败,
但异常被就地吞掉、转成了空列表往上交。
上层看到空列表只能判定「查过了,确实没有」,
于是把这结果写进负缓存,有效期 3 天。
一次锁屏断网就把这首歌锁死了。手动重取能好,是因为它走
force = true绕过缓存重新联网——
这正好反证了问题不在歌词源,而在「坏结果被当成有效结论缓存了」。改法:
- 新增
SearchOutcome,让歌词源必须如实上报成败,
把「确实没有候选」和「请求没打通」区分开 - 酷狗 / 网易云 / Lrclib 三个源全部改用新契约,
异常不再被吞;有响应但结构不对(风控返回 HTML 等)也算「没查成」 - 只有「确实查过但没有」才写负缓存,「没查成」一律不写
- 新增自动退避重试:状态仍是未取到时,按 3/10/30/60/120 秒
自动重查(累计约 4 分钟)。超过为止,不再自动惊动用户。
为什么加重试:修掉负缓存只解决「不再被锁死」,
但那一轮的失败状态仍留在内存里。而曲目没再变过,
原本只有「手动重取」或「打开 App」才会重新触发——
用户亮屏后如果只看悬浮窗不进 App,歌词就一直空着。
现在不管有没有打开 App,网络恢复后都会自己补上。 - 新增
内部
- 三个歌词源的
search()返回类型由List<Candidate>改为SearchOutcome,
调用方同步更新(取词主流程、锁定来源流程、调试页)。
安卓自动歌词应用 —— 悬浮窗 / 通知栏 / App 内实时逐字高亮。
| 项 | 值 |
|---|---|
| 版本 | 1.12.7 |
| 构建号 | 42 |
| Commit | ec0b18c |
| 最低系统 | Android 8.0 (API 26) |
| 架构 | 通用(无 native 库,全平台可装) |
选择哪个包
| 包 | 用途 | 覆盖安装 |
|---|---|---|
*-release.apk |
日常使用推荐 | ✅ 可直接升级 |
*-debug.apk |
排查问题用,含调试符号 | ❌ 与正式版签名不同 |
两个包功能完全一致,日常使用请选
release包。
安装说明
- 下载上方 Assets 里的
AutoLyrics-1.12.7-build42-*.apk - 传到手机点击安装(需允许「安装未知来源应用」)
- 首次启动后按App 内引导开启三个权限:
通知读取 / 悬浮窗 / 通知权限