桌面歌词是一个典型的小功能,用不上的人完全无感,用上的人离不开。它解决的是「听歌时不想切窗口」这件事:写代码、做表格、看文档的时候,歌词浮在最上层,还能点击穿透,不挡鼠标操作。
设备热切换是配套的另一半。以前换耳机要暂停、拔线、插线、再播放,现在直接在播放页选输出设备,播放不中断,只是有大约 0.4 秒的静音。这两件事都值得拆开看。
歌词窗口的四个参数
第一个是置顶。开启后歌词窗口始终在最前,但不会抢焦点;配合「点击穿透」,鼠标可以直接点到下面的编辑器。穿透开启后无法拖动窗口,需要先在托盘菜单里临时关闭。
第二个是行数,支持单行与双行。双行适合副歌跟唱,单行适合不占地方。行数变化会改变窗口高度,位置不会自动调整,需要手动拖一次。
第三个是字号,范围 12 到 48px,步进 2px。字号变大后长句会自动折行,折行位置按语义断句而不是按字符数,这一点比很多同类实现细致。
第四个是透明度,30% 到 100%。低于 50% 时在白底文档上会看不清,建议配深色背景使用。歌词颜色跟随主题,深色主题下默认白色描边。
| 参数 | 范围 | 默认 | 建议 |
|---|---|---|---|
| 置顶 | 开/关 | 开 | 配合穿透使用 |
| 行数 | 单行/双行 | 双行 | 副歌跟唱选双行 |
| 字号 | 12~48px | 20px | 2K 屏建议 26px 以上 |
| 透明度 | 30%~100% | 85% | 深色背景下可降到 60% |
还有一个隐藏项:歌词延迟校准,范围 -200ms 到 +200ms。蓝牙耳机普遍有 150ms 到 250ms 的传输延迟,歌词会比声音早,用这个参数往正方向调即可。校准值按设备记忆,换耳机自动切换。
热切换的 0.4 秒花在哪
我们用 240fps 慢动作录屏加客户端日志,把从板载声卡切到 USB 解码器的过程拆成四段:停止当前输出(约 60ms)、释放音频会话(约 90ms)、初始化新设备(约 180ms)、重新填充缓冲(约 70ms)。合计约 400ms。
初始化那 180ms 最不可控。USB 设备需要重新枚举、协商采样率、加载驱动,不同设备差异很大:入门小尾巴 120ms 左右,专业声卡可能到 400ms;蓝牙设备还要加上重新建立 A2DP 连接的时间。
| 切换路径 | 中断时间 | 说明 |
|---|---|---|
| 板载声卡 → USB 解码器 | 0.40s | 重新枚举并协商采样率 |
| 板载声卡 → HDMI 输出 | 0.30s | 系统内切换,无需枚举 |
| 蓝牙耳机 → 板载声卡 | 0.90s | 需断开 A2DP 再重建 |
| USB 解码器 → USB 解码器 | 0.55s | 两台设备各自枚举 |
0.4 秒的静音在听专辑时能察觉,但不影响使用;0.9 秒的蓝牙切换就比较明显了。客户端的处理是保留播放位置与缓冲状态,切换完成后从原位置继续,不会重头播放。
「热切换的目标不是零中断,是把中断控制在一次呼吸之内。」——客户端播放器模块的设计说明
多显示器与高 DPI 的坑
第一个坑是 DPI。主屏 100%、副屏 150% 缩放时,歌词窗口拖到副屏会变小或模糊。原因是窗口按主屏 DPI 创建,跨屏后没有重新计算。解决办法是在「设置 → 显示 → 高级缩放」里把两块屏设为相同比例,或者重启客户端让窗口在新屏上重建。
第二个坑是全屏应用。部分游戏与视频播放器使用独占全屏,歌词窗口会被盖住甚至导致游戏掉帧。把游戏改成「无边框窗口」模式可以解决。
第三个坑是穿透状态下无法右键。想调整参数只能从托盘图标进入,或者临时用快捷键关闭穿透。快捷键默认是 Ctrl+Alt+L,可在设置里改。
这些细节都不复杂,但决定了这个功能是「能用」还是「好用」。桌面端在这块的完成度明显高于移动端,需要的话可以在下载页拿到 Windows 与 macOS 安装包。
用户评论(4 条)
点击穿透是神来之笔,写代码时歌词浮着完全不碍事。
DPI 那个坑我遇到了,副屏上歌词小得看不清,最后把缩放调成一样才正常。
歌词延迟校准很有用,我耳机延迟大概 200ms,调到 +180 刚好。
独占全屏下歌词会被盖,改无边框就好了,掉帧也没了。