Files
LoveLiveMusicPlayer-Next/README.md
2026-08-08 23:41:19 +08:00

4.4 KiB
Raw Blame History

LoveLiveMusicPlayer · 桌面端

基于 electron-vite 的 LoveLive! 音乐播放器 PC 端,复刻原 Electron 项目功能。

设计目标之一:为后续移动端Flutter预留最大兼容性与可扩展性。 双端联动协议被抽取为独立、框架无关的共享模块 src/shared/protocol,移动端可直接对照复用。

技术栈

维度 选型
框架 Electron 43 + Vite 7 + React 19 + TypeScript
脚手架 electron-vite
状态管理 Zustand
样式 Tailwind CSS 3src/renderer/src/styles/index.css
本地数据库 better-sqlite3表结构与移动端 SQLite 对齐)
配置存储 electron-store
局域网通信 wsWebSocket 服务端)+ expressHTTP 文件服务),运行在主进程
二维码 qrcode.react
音频转码 ffmpeg-staticiOS 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 / libraryStoreZustand
        └── lib/                #   repositoryDB 访问)/ 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 已备 fetchJsonUI 触发待接)
  • 断点续传 / 完整性校验 / 配对 token 鉴权(协议 capabilities 已预留)
  • 自动更新electron-updater 接线)、导出 Excel、托盘