Harmony 是一个使用 Python 和 PySide6 构建的桌面音乐播放器,结合了本地音乐库、云盘播放、插件化在线音乐能力,以及便于持续维护的分层架构。
- 本地音乐库管理:支持目录扫描、元数据提取、内嵌封面读取、SQLite FTS5 搜索,以及专辑 / 艺术家 / 流派聚合
- 完整播放体验:播放队列持久化、多种播放模式、迷你播放器、当前播放窗口、睡眠定时器、均衡器界面、收藏、历史、最近添加、最多播放等视图
- 云盘播放:支持夸克和百度网盘,包含扫码登录、远程目录浏览、下载 / 缓存处理,以及分享链接搜索
- 插件系统:在线音乐源、歌词源、封面源、侧边栏入口、设置页都可以通过插件扩展
- 内置歌词 / 封面插件,以及内置 QQ 音乐插件,支持在线浏览、搜索、登录、队列操作、歌词和封面数据
- 可选 AI 元数据补全,兼容 OpenAI 风格接口;可选 AcoustID 音频指纹识别
- 支持中英文界面、主题系统、内置字体,以及在运行环境允许时的系统媒体键集成
内置插件位于 plugins/builtin。外部插件可以通过 设置 -> 插件 从 zip 文件或 URL 安装。
| 插件 | 能力 |
|---|---|
qqmusic |
在线音乐源、侧边栏入口、设置页、歌词源、封面源 |
lrclib |
歌词源 |
netease_lyrics |
歌词源 |
kuogo_lyrics |
歌词源 |
netease_cover |
封面源 |
itunes_cover |
封面源 |
last_fm_cover |
封面源 |
- Python 3.11+
uv- Windows、Linux 或 macOS
- 如果要使用
mpv后端,需要系统提供libmpv运行时
mpv 运行时说明:
- Linux(Debian/Ubuntu):
sudo apt-get install libmpv-dev - macOS(Homebrew):
brew install mpv - Windows:安装
mpv,或确保mpv-2.dll已在PATH中
git clone https://github.com/power721/Harmony.git
cd Harmony
# 运行时依赖
uv sync
# 可选:开发工具,例如 pytest、pytest-qt、ruff、pyright
uv sync --extra dev --group dev
# 可选:开发环境下载内置字体
./download_fonts.sh
# 启动应用
uv run python main.py字体相关说明见 docs/font-bundling.md。
- 点击
Add Music扫描本地目录并建立音乐库 - 打开
Cloud Drive登录夸克或百度网盘并浏览远程文件 - 打开
设置 -> 插件启用、禁用或安装插件 - 打开
设置 -> 播放在mpv与Qt Multimedia之间切换 - 打开
设置 -> AI或设置 -> AcoustID配置可选的元数据服务
常用命令:
# 运行应用
uv run python main.py
# 运行完整测试
uv run pytest tests/
# 较快的 UI 测试
uv run pytest tests/test_ui/ -m "not slow"
# Lint
uv run ruff check .
# 按当前平台打包
./build.sh
# 显式指定平台打包
uv run python build.py linux
uv run python build.py macos
uv run python build.py windows
# Linux 发布 / AppImage 流程
./release.shpytest.ini 中定义了这些标记:
unitintegrationslow
Harmony 采用分层架构:
UI -> Services -> Repositories -> Infrastructure
\-------> Domain <-------/
顶层目录说明:
app/ 应用启动与依赖装配
domain/ 纯领域模型
repositories/ 基于 SQLite 的持久化适配层
services/ 音乐库、播放、云盘、下载、歌词、元数据、AI 等服务
infrastructure/ 音频后端、数据库、缓存、网络、字体、安全等技术实现
system/ 配置、事件总线、主题、国际化、快捷键、插件宿主
ui/ 窗口、对话框、控件、视图、控制器、工作线程
plugins/ 内置插件实现
packages/ 本地插件 SDK 包(`harmony-plugin-api`)
tests/ 按层拆分的 pytest 测试
docs/ 设计文档、问题分析、实现记录
data/ 开发模式下的可写应用数据
- 开发模式下,可写数据位于
data/;打包后会写入各平台的应用数据目录。 - 开发环境数据库默认是项目根目录下的
Harmony.db。 - 内置字体从
fonts/加载;若缺失,会自动回退到系统字体。 - Linux 的系统媒体键依赖 MPRIS 和 QtDBus;Windows 可使用
pynput;macOS 目前主要回退到窗口聚焦时的快捷键。
示例截图位于 screenshots/。