一处播放,多处显示
Mac 负责识别歌曲、挑选歌词和校准进度。iPhone 与 iPad 在同一局域网里直接接上这份结果,不重复搜索,也不各自漂移。手机自己开始播放时,本机优先。
继续使用 Apple Music 或 Spotify。Cross Lyrics 接管歌词显示,不接管你的播放习惯。
前台打开移动端,就能跟随附近 Mac 的同一首歌、同一份歌词与同一套校准。
开启跨设备锁屏歌词后,当前句与副行通过可选 Relay 更新到 Live Activity 与灵动岛。
音频和歌词都是项目自制的,只有普通 LRC。行内进度按字数估算,中文大约每秒三个字;估算走完就停在句末等下一句,不硬拖到下一句开始。
app 里也是这么做的:没有可靠的字词时间戳,就不假装有。
进度条会跟着当前视觉变。夜航是一条彗尾光轨,星轨是点状星路加一颗发光的星头,潮汐是波浪填充。Spotify 给了封面地址,背景就用封面色彩晕染。



切歌后同时查 LRCLIB、AMLL、网易云和 QQ 音乐。四份候选放进同一套规则打分,取分最高的,不是谁先返回谁赢。
打分会看标题、歌手、版本、时长、时间轴与跨来源印证。第一个可用候选出现后还会短暂等待,看有没有更可靠的一份。
匹配错了,菜单里的「不是这首歌」会记住它并立刻重查,被拒绝的候选以后不会再选。
四个都没命中,就先去掉版本后缀、括号和 feat. 等噪声再查。配置了 AI 接口时,还可以生成几组更接近曲库写法的查询词。刘海上的「没有歌词 · 点这里搜索」本身就是按钮。
原文、译文和罗马音沿着同一条时间线前进。中文目标会优先使用可用的社区译文;没有时回落到系统翻译,也可以选择你自己配置的 OpenAI 兼容服务。
日语和韩语歌词可以显示罗马音跟唱行。点「这句在讲什么」,AI 会用两三句讲清白话意思和意象;生词本留下值得记的词、读音、释义与原句。AI 是理解层,不是产品运行的前提。
AI 调用默认每天 150 次、估算 ¥1、单曲最多 3 次。到顶或请求失败时自动回落到系统翻译,面板里能看到当天用量。
API Key 存在系统钥匙串里,不写进配置文件
Mac 端按功能可能需要「自动化」来读取和控制 Apple Music 与 Spotify;使用附近歌词屏时还需要「本地网络」。不申请屏幕录制、麦克风、辅助功能或完全磁盘访问,本地音频通过文件选择器获得访问。
播放本地音频时,旋律柱由真实 FFT 驱动(Accelerate/vDSP,20 个对数频段)。跟随流媒体时拿不到音频流,就改用歌词事件生成,并标明这是前奏、间奏还是尾奏。不会假装自己听到了声音。
收藏、随记、歌词和译文缓存、用量记录默认写在 ~/Library/Application Support/AmbientLyrics。附近设备通过加密的本地会话传输播放信息、歌词与样式,没有账号。
开启跨设备锁屏歌词后,Live Activity 所需的歌名、当前句与副行会经过 Cloudflare Relay,再由 APNs 发到 iPhone;它不会传输音频流。AI 翻译则只在启用时把歌词发到你配置的模型服务。
每次自动查找的查询词、候选分数和拒绝原因写进本地 lyric-decisions.jsonl,只写不读,删掉不影响使用。
需要 macOS 13 或以上;iPhone 与 iPad 伴侣端需要 iOS 17 或以上。现在仍是本地原型,Mac 安装脚本不会自动安装移动端。
zsh ./install-local.sh