[AI Development Lab] 【deepin插件开发活动】Deepin Dock Lyrics 让歌词住进 deepin 任务栏
Tofloor
poster avatar
bliss
deepin
2026-08-13 22:42
Author

【deepin插件开发活动】Deepin Dock Lyrics —— 让歌词住进 deepin 任务栏

项目 内容
作品名称 Deepin Dock Lyrics(deepin-dock-lyrics)
参赛方向 方向四 · 扩展 DDE Shell 的桌面能力(组合方向三 · DTK 创新原生应用)
源码仓库 https://github.com/PIN-HE/Deepin-Dock-Lyrics/
作品类型 dde-shell Dock Applet + 用户会话后台服务(lyrics-dockd)+ DTK6 设置应用
开源协议 MIT
版本 v1.0.0.2

一、作品简介

在 deepin/UOS v25 上实现桌面级歌词显示的完整闭环:

任意 MPRIS 音乐播放器 → 自动发现并跟随 → 后台检索/缓存歌词 → Dock 右侧逐行同步显示
↕
DTK6 设置应用统一管理(选播放器、偏移、布局、候选确认)

产品本身不播放音乐、不管理音乐库、不要求登录——它只做一件事:让歌词安静地住进任务栏。听歌时切到浏览器、写代码、看文档,歌词始终在 Dock 右侧同步滚动,不遮挡窗口、不打断工作流;播放器未运行时歌词区域自动隐藏,Dock 布局无侵入(不修改 Dock 源码)。

💡 需求来源:桌面歌词是用户从 Windows/移动端迁移到 Linux 后的高频需求之一:
主流播放器的桌面歌词插件在 Wayland 下普遍失效或依赖悬浮窗,而 deepin 的 Dock 体系(dde-shell)天然适合承载常驻信息。本项目探索的就是「Shell 原生歌词部件」这一形态——不弹窗、不置顶、不抢占焦点。

截图

图片.png

图片.png

图片.png

二、功能特性

  • ✅ MPRIS 播放器自动发现:枚举会话中所有 MPRIS 播放器,跟踪播放/暂停/拖动/切歌,
    已知播放器显示友好中文名(如"网易云音乐""端闱乐部")。
  • ✅ 逐行同步歌词:当前行高亮 + 下一行提示,行内平滑进度、长句自动滚动;
    经典/卡拉OK 两种 Dock 布局一键切换。
  • ✅ 在线检索与本地缓存:LRCLIB 唯一在线源,请求序列化 + 限流 + SQLite 本地缓存
    (含负结果冷却),支持候选歌词确认;本地 LRC 文件与播放器缓存歌词同样可用。
  • ✅ 多源歌词协调:本地文件 → 播放器缓存 → LRCLIB 三级来源按优先级自动切换。
  • ✅ 繁体自动转简体:OpenCC t2s.json 解析前转换,缓存保留来源原文,不影响复现。
  • ✅ MPRIS 定向音频可视化(可选,PipeWire):只读取选中播放器精确匹配的音频流,
    内存级处理,绝不录音/保存/上传;无法精确匹配时不读取系统音频。
  • ✅ DTK6 设置应用:启用开关、播放器选择、同步偏移(±)、可视化、布局、候选确认、
    清除缓存、关于对话框,全中文界面 + DCI 图标。
  • ✅ 系统托盘菜单:启用/打开设置/退出,Qt 原生 QSystemTrayIcon 实现。
  • ✅ 隐私优先:日志 allowlist 过滤,曲名/歌词/查询串/D-Bus 原始载荷一律不进日志;
  • 全项目零遥测上传。
  • ✅ 安装即用:cmake --install 一键部署;daemon 由 systemd 用户服务管理并支持
    D-Bus 自动激活,重启会话后自动恢复。

三、创新说明

创新点 说明 对应评审维度
Shell 原生歌词部件 不是悬浮窗/置顶窗,而是挂载在 dde-shell Dock(org.deepin.ds.dock)内的 Applet(dockOrder: 24),随 Dock 主题、大小、位置自适应,Wayland 下天然稳定 创新性、UI/UX
行内进度平滑外推 播放器 Position 上报粒度可能很粗(如 ter-music 约 1 秒步进),daemon 按 Rate 在两次上报间外推位置,只有上报值追平/超过外推值时才重建基准,行内进度丝滑且永不回跳 最佳技术实现
隐私优先的架构设计 三层防线:(1)日志 allowlist 拒绝敏感字段;(2) 零遥测上传;(3)音频可视化只匹配选中播放器的精确 D-Bus PID 流,绝不做"按应用名/标题猜音频流",匹配失败即放弃 安全性、真实使用价值
六边形架构(ports/adapters) daemon 业务状态机只依赖端口接口,HTTP/缓存/播放器/设置全部可替换;测试用假传输运行,不消耗 LRCLIB 真实配额,外设变更零业务改动 代码质量与可维护性
多源歌词无缝切换 本地 LRC → 播放器缓存 → LRCLIB 三级降级,离线也能显示本地歌词 功能完整性
缓存保留原文 + 繁转简展示 转换只发生在展示链路,缓存/复现链路保留来源原文,功能与合规兼得 创新性

四、技术架构(简述)

  • 三进程协作:lyrics-dockd(会话 D-Bus 服务 org.deepin.LyricsDock1,承担全部网络/缓存/解析)
    • deepin-lyrics-settings(DTK6 控制界面)+ org.deepin.ds.lyrics-dock(dde-shell Applet 纯渲染)。
  • 平台栈:deepin 25 / Wayland · Qt 6(QML+Widgets 双栈)· DTK6(+DConfig)· dde-shell 2.x ·
    PipeWire(可选)· OpenCC · CMake/C++17。
  • 工程质量:约 20 个 CTest 测试目标,覆盖解析、同步、缓存、适配器、状态机与视图模型;
    测试零外部网络依赖。完整架构图与状态机见仓库 design/ 与 README。

五、deepin Skills 辅助开发说明

本项目全程基于 deepin Skills 与 AI 编程 Agent 协作完成:

Skill 模块 用途
dde-shell-development Dock Applet:DApplet 桥接、Shell QML API、ds_install_package 打包、dockOrder 布局
dtk-development DTK6 设置应用:DApplication/DAboutDialog、DTK 控件与主题、设计令牌
dde-tray-development 托盘交互约定参考
dde-control-center-development DConfig 配置规范参考
codebase-memory 代码库知识图谱:结构查询、调用链追踪、影响分析

图片.png

六、构建、安装与使用

cmake -S . -B build && cmake --build build -j"$(nproc)"
ctest --test-dir build --output-on-failure   # 单元测试
sudo cmake --install build                    # 安装设置应用 + Dock Applet + DConfig

daemon 与 systemd/D-Bus 服务文件按 README 三步安装后即用(systemctl --user enable --now lyrics-dockd.service)。
完整的分步安装、使用与卸载文档见仓库 README。

或者选择使用deb一键开箱 地址:https://github.com/PIN-HE/Deepin-Dock-Lyrics/releases/tag/v1.0.0.2-beta

七、开源协议与致谢

  • MIT 协议开源,欢迎 Star / Issue / PR。
  • 感谢 deepin 社区与 deepin Skills 项目对独立开发者的支持。
Reply Favorite View the author
All Replies
avatar
𰻞𰻝面
deepin
2026-08-14 08:54
#1

这个有点意思

Reply View the author
avatar
晚秋(lateautumn)
Moderator
2026-08-14 09:10
#2

厉害!applaud

Reply View the author
avatar
骑🐖追帅哥bot
Moderator
2026-08-14 09:22
#3

开源精神~!kissing_heart

Reply View the author
avatar
北冥夜未央
deepin
Ecological co-builder
2026-08-14 19:04
#4

这个好!

Reply View the author
avatar
士无双
deepin
2026-08-17 13:00
#5

用上了,做了一点小改动,居中模式下移动到了左侧,右边有个CPU插件了,太挤了。哈哈,好用。
image.png

Reply View the author
avatar
雪域一线天
deepin
2026-08-24 15:29
#6

终于有了,一直期待这个的。

如果这个插件里再内置个播放控制按钮就更好了。

Reply View the author
avatar
chnome
deepin
2026-08-26 08:55
#7
士无双:

用上了,做了一点小改动,居中模式下移动到了左侧,右边有个CPU插件了,太挤了。哈哈,好用。
image.png

@bliss 这个小工具真的很棒👍 ,几个小优化建议:
1、部分歌词无法搜索到,能优化一下搜索;
2、没有歌词的时可以选择显示音频可视化或者显示歌曲信息;
3、本楼设置显示在左边真的很好,能否将该功能整合到程序,可以在设置内选择显示在任务栏左边或者右边;
4、点击弹窗补充控制音乐播放的控件(上一曲、暂停、下一曲)。

Reply View the author
avatar
骑🐖追帅哥bot
Moderator
2026-08-28 11:06
#8
chnome:

@bliss 这个小工具真的很棒👍 ,几个小优化建议:
1、部分歌词无法搜索到,能优化一下搜索;
2、没有歌词的时可以选择显示音频可视化或者显示歌曲信息;
3、本楼设置显示在左边真的很好,能否将该功能整合到程序,可以在设置内选择显示在任务栏左边或者右边;
4、点击弹窗补充控制音乐播放的控件(上一曲、暂停、下一曲)。

成功参与!

Reply View the author
avatar
152******72
deepin
2026-08-30 11:59
#9

好像不支持rhythmbox?还有能支持本地歌词吗?好多歌词搜不到,但是我本地有歌词

Reply View the author
avatar
bliss
deepin
2026-09-01 19:50
#10
chnome:

@bliss 这个小工具真的很棒👍 ,几个小优化建议:
1、部分歌词无法搜索到,能优化一下搜索;
2、没有歌词的时可以选择显示音频可视化或者显示歌曲信息;
3、本楼设置显示在左边真的很好,能否将该功能整合到程序,可以在设置内选择显示在任务栏左边或者右边;
4、点击弹窗补充控制音乐播放的控件(上一曲、暂停、下一曲)。

感谢您细致且宝贵的建议!🙏

针对您提出的优化点,已完成相关功能的开发,目前正处于本地自测与内部验证阶段,待开发机完整回归通过后即可合入主干。

具体更新内容如下:

  1. 交互优化:现已支持鼠标拖拽调节窗口停靠位置(左/右两侧),同时设置页已同步新增对应的开关选项,方便您按需配置。
  2. 视觉自定义:歌词颜色现已支持全量自定义。您可直接在设置界面修改色值,保存后即时生效,无需任何底层代码改动。

关于您提到的**第4点(协议相关)****,由于涉及底层通信逻辑,****正在加紧攻克协议适配中的技术难点。**预计今晚完成初步调试并提测,届时将第一时间同步您。

再次感谢您的关注与提议!

图片.png

图片.png

图片.png

图片.png

Reply View the author