LX Music 桌面版:免费跨平台音乐播放器,七大音乐源聚合搜索一次命中
【免费下载链接】lx-music-desktop一个基于 Electron 的音乐软件项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop
LX Music 桌面版(lx-music-desktop)是一款基于 Electron 与 Vue 3 的免费开源音乐软件,聚合搜索了酷我、酷狗、QQ、网易云、咪咕、虾米、百度 7 个音乐平台的公开接口。它解决的具体痛点是:你想听的一首歌往往散落在多个 App 里,而它让一次搜索就能拿到跨平台的全部候选。当前版本 v2.12.2,运行在 Electron 40 之上,覆盖 Windows 7 及以上、macOS、Linux 三大桌面平台。
🎵 打开软件,一次回车拿到全平台候选
我们打开软件:左侧是歌单栏,顶部搜索框已聚焦,光标在闪。输入"周杰伦 晴天"回车,软件对启用的音乐源同时发起搜索请求,同一首歌在各平台的候选并排铺开,每行标着来源。你按音质和偏好选一首,点击后本地按歌手、歌名、时长做多级匹配锁定目标,音频链接则来自你在设置中挑选的自定义源,而不是平台直连。
围绕这套源体系,各平台提供的能力并不完全相同:
| 音乐源 | 搜索 | 歌词 | 排行榜 | 歌单 | 热歌 | 评论 |
|---|---|---|---|---|---|---|
| 酷我 kw | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 酷狗 kg | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| QQ 音乐 tx | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 网易云 wy | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 咪咕 mg | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 虾米 xm | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| 百度 bd | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
洛雪音乐助手主界面:顶部搜索框、左侧歌单与底部播放控制区,一次搜索即可聚合 7 个平台的候选歌曲
⚙️ 七个文件夹加一张路由表:聚合搜索的实现方式
音乐源模块集中在 musicSdk/ 目录,每个平台一个独立文件夹:
src/renderer/utils/musicSdk/ ├── index.js # 源注册表 + 并行搜索聚合 ├── api-source.js # 音频地址源的路由层 ├── api-source-info.ts # 源与音质的声明配置 ├── kw/ kg/ tx/ wy/ mg/ bd/ # 各平台独立适配模块 └── xm.js # 虾米(已停止服务,保留实现)为什么每个平台要拆成独立文件夹?因为 7 个平台的接口协议、参数签名、返回结构完全不同:kw/index.js里酷我按 songmid 查详情,网易云则用完全不同的加密参数。拆开后,某个平台接口变动只需改自己目录内的文件,index.js之外的代码零改动。
元数据与音频地址的职责分离是这套架构的关键。搜索、歌词、排行榜、歌单直接请求各平台公开接口;而音频链接本身不由软件内置接口提供,走的是用户设置的"自定义源",由 api-source.js 统一转发。说白了,api-source.js就是一张路由表:根据你当前选中的源,把"要这首歌的 320k 链接"的请求转发给对应源模块。这样音频源的失效与替换不会影响搜索和歌词功能,两者互不牵连。
搜索结果聚合的"聚合"二字体现在两处。searchMusic对所有启用的源并行发请求,单源超时或失败直接返回空,不拖慢整体;findMusic再按"歌手全等加歌名全等加时长相等"逐级放宽的规则给候选排序,把最匹配的结果顶到前面,重复歌曲自然被去重收敛。
🎨 技术选型与全平台构建产物清单
依赖选得克制,每项都有明确理由:
- Electron 40:跨平台桌面容器,一套代码覆盖三大系统
- Vue 3.3:渲染层响应式 UI,Composition API 组织复杂播放状态
- TypeScript:主进程、worker 与同步模块全量类型约束
- better-sqlite3:本地歌单、下载任务、设置全部落库,同步查询快
- webpack + electron-builder:打包与分发管线,构建脚本集中在 build-config/
| 平台 | 构建产物 |
|---|---|
| Windows | exe 安装包(x86 / x64 / arm64)、7z 绿色版、Windows 7 兼容版 |
| Linux | deb(amd64 / arm64 / armv7l)、rpm、AppImage、pacman |
| macOS | dmg(x64 / arm64) |
数据默认存放在系统标准位置:Linux 的~/.config/lx-music-desktop、macOS 的~/Library/Application Support/lx-music-desktop、Windows 的%APPDATA%/lx-music-desktop;Windows 下若程序目录存在portable文件夹,则自动改用其存储,方便 U 盘携带。
个性化入口集中在 src/common/theme/:主题定义在index.json,主色调以 CSS 变量描述,一套色板自动生成从 10% 到 90% 的透明度色阶;想加主题,改完配置跑一次npm run build:theme即可。内置背景里既有中国风山水,也有节庆主题:
中国风山水主题背景,与聚合搜索结果页的深色界面搭配,营造沉浸式听歌氛围
月夜流星主题背景:主题系统的背景图同样支持自定义更换
🚀 开放 API 与自建同步服务
动手用户有三条扩展路径。
开放 API:v2.7.0 起,在设置中启用后,本地启动一个 HTTP 服务(服务实现见 openApi/),最小调用只有两行:
# 查询当前播放状态(歌名、歌手、进度) curl http://127.0.0.1:10754/status # 播放暂停 curl -X POST http://127.0.0.1:10754/play/status之外还支持 SSE 订阅:状态一变就推一条事件,做桌面歌词或状态栏展示不用轮询。典型场景:接入 Home Assistant 这类智能家居系统控制播放;浏览器脚本联动触发播放;把/status输出接到第三方面板上显示"正在播放什么"。
自建同步服务:v2.2.0 起数据同步服务独立维护,客户端与同步端的代码在 sync/ 下;部署到自己的 Node.js 服务器后,歌单、设置、播放历史在多台设备间私有同步,数据不过第三方的手。
接入新音乐源:在musicSdk/下新建目录,实现musicSearch、getLyric、leaderboard等标准方法,再回到index.js的源列表里注册一个 id,聚合搜索会自动把新源纳入并行请求。
📦 五分钟跑起来,然后动手改它
搭建开发环境:
- 确认 Node.js 22 以上、npm 8.5.2 以上(见
package.json的 engines 字段) - 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/lx/lx-music-desktop - 在仓库目录执行
npm install - 执行
npm run dev进入开发模式,窗口几秒内拉起 - 先用
npm run lint确认本地 ESLint 规则通过
参与贡献:
- 在
dev分支开发并提 PR;新功能建议先开 Issue 说明,确认需求确实存在 - 修复 bug 的 PR 需要附修复前后说明与重现方式
- 代码过 ESLint 标准配置加 TypeScript 类型检查,Vue 组件走
vue-eslint-parser
把仓库加进你的书签,用"歌手名 歌名"的格式跑一次跨平台搜索,对比 7 个源返回的结果差异;再把开放 API 打开,让浏览器或脚本读一次/status的输出,这两个动作比读完这篇文档更快建立直觉。
【免费下载链接】lx-music-desktop一个基于 Electron 的音乐软件项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考