9455c1d57e4e129750bd3a5b97783d4321219640
LoveLiveMusicPlayer · 桌面端
基于 electron-vite 的 LoveLive! 音乐播放器 PC 端,复刻原 Electron 项目功能。
设计目标之一:为后续移动端(Flutter)预留最大兼容性与可扩展性。 双端联动协议被抽取为独立、框架无关的共享模块
src/shared/protocol,移动端可直接对照复用。
技术栈
| 维度 | 选型 |
|---|---|
| 框架 | Electron 43 + Vite 7 + React 19 + TypeScript |
| 脚手架 | electron-vite |
| 状态管理 | Zustand |
| 样式 | Tailwind CSS 3(src/renderer/src/styles/index.css) |
| 本地数据库 | better-sqlite3(表结构与移动端 SQLite 对齐) |
| 配置存储 | electron-store |
| 局域网通信 | ws(WebSocket 服务端)+ express(HTTP 文件服务),运行在主进程 |
| 二维码 | qrcode.react |
| 音频转码 | ffmpeg-static(iOS flac→wav,跨平台免编译) |
| 图标 | lucide-react |
目录结构
src/
├── shared/ # ★ 双端共享(协议 + 领域模型 + IPC 通道常量)
│ ├── protocol/ # 命令枚举 / 类型 / 端口 / 版本协商(移动端可复用)
│ ├── models/ # Album/Music/Menu/Love/History/Lyric(对齐移动端实体)
│ └── ipc/channels.ts
├── main/ # 主进程
│ ├── index.ts # 入口(单例锁、生命周期)
│ ├── window/ # 主窗口 + 桌面歌词窗口
│ ├── ipc/ # IPC 注册
│ └── services/ # store / database / fileServer / musicServer(4388)
│ # / dataServer(4389) / transcode / network / lanInfo
├── preload/ # 类型安全的 window.api 桥接
└── renderer/ # 渲染进程(React)
└── src/
├── components/ # TitleBar / Sidebar / PlayerBar / MusicList / ...
├── pages/ # Home / Albums / AlbumDetail / Favorites / Playlists
│ # / History / Lyric / Transfer / Sync / Settings / DesktopLyric
├── stores/ # uiStore / playerStore / libraryStore(Zustand)
└── lib/ # repository(DB 访问)/ lrc(歌词解析)/ const
已复刻的 PC 端功能
- 音乐馆(按企划分组)、专辑、专辑详情
- 播放器(顺序/列表循环/单曲/随机、进度、音量、媒体会话、上一首/下一首)
- 我喜欢、歌单(PC id≤100 / 手机 id>100)、最近播放
- 三语歌词(日/中/罗马音)+ 桌面歌词独立窗口
- WiFi 传歌(二维码配对 + WebSocket 4388 + HTTP 文件下载)
- 数据同步(我喜欢/歌单双向,WebSocket 4389)
- 本地 HTTP 文件服务(端口探测、可配置)
- iOS flac→wav 转码
- 设置:曲库目录、HTTP 端口、主题(深/浅/跟随系统)、强调色
- 无边框窗口(Windows 自定义控制按钮 / macOS 红绿灯位)
与移动端的兼容性设计
- 协议单一来源:
src/shared/protocol/commands.ts定义所有命令字(枚举,禁止裸字符串), 字符串值与旧移动端保持一致,保证新 PC 端可直接与现有 App 联动。 - 版本协商:
version.ts在保留transVer=1兼容的同时引入minCompatVer+capabilities, 支持向后兼容与能力位扩展。 - 数据结构对齐:领域模型与移动端 Floor 实体一致,降低同步映射成本。
- 移动端重构时可把
src/shared作为协议对照,甚至用代码生成同步。
开发与构建
npm install # 安装依赖(postinstall 会为 Electron 重建原生模块)
npm run dev # 开发模式
npm run build # 类型检查 + 打包
npm run build:win # 打 Windows 安装包
首次如遇
Electron uninstall,执行node node_modules/electron/install.js下载 Electron 二进制; 原生模块(better-sqlite3)如报 ABI 不匹配,执行npx electron-builder install-app-deps。
待接入(占位/后续)
- OSS
data.json曲库元数据拉取入库(main/services/network.ts已备fetchJson,UI 触发待接) - 断点续传 / 完整性校验 / 配对 token 鉴权(协议
capabilities已预留) - 自动更新(electron-updater 接线)、导出 Excel、托盘
Description
Languages
TypeScript
87.9%
JavaScript
10.8%
CSS
1%
HTML
0.3%