Skip to content

空壳播放器:可配置音源的音乐播放器(网页 / 桌面 / 安卓) - #2

Draft
Makima667 wants to merge 25 commits into
mainfrom
feat/initial-app
Draft

Makima667 wants to merge 25 commits into
mainfrom
feat/initial-app

Conversation

@Makima667

Copy link
Copy Markdown
Owner

Requested by xiao · project thread

接替 #1:按仓库所有者的要求把全部提交改为本人署名后,#1 因为和 main 失去共同历史被 GitHub 自动关闭,内容与 #1 相同。

概要

不带曲库的音乐播放器"外壳",歌曲来源完全由用户配置的音源决定。前端是 Vite + 原生 JS,用 Tauri 2 打包成桌面版和安卓版,网页版可以部署到 Cloudflare Pages。

音源(src/sources/)

  • MusicFree 插件:CommonJS 运行环境,内置 axios(基于 fetch 的精简实现)、crypto-js、cheerio、dayjs、qs、he、big-integer;支持用户变量、订阅导入、音质回退
  • 洛雪自定义源:实现 lx.request / send / on / utils(AES、RSA 无填充、MD5、Buffer、zlib),按平台代号 kw / kg / tx / wy / mg 接收其他音源搜到的歌
  • JSON 配置源、JS 脚本源,以及内置的示例源(本地合成的公版旋律)、本地文件源、已下载
  • 取地址调度:本源 → 洛雪源 → 失败自动换源(标题、歌手、时长匹配)

功能

搜索、播放列表、我喜欢 / 自建歌单、下载(附 .lrc,可离线播放)、LRC 歌词与翻译、本地文件和文件夹、主题、备份导入导出。

动效

跟随封面取色的流动背景和主题色、旋转黑胶和唱臂、律动条、卡拉 OK 逐行填色歌词、列表、页面和弹窗过渡;支持 prefers-reduced-motion,设置里可以关掉动态背景。

体验打磨(第二轮)

  • 上手:首次欢迎引导、搜索页「第一步:添加音源」提示、空状态直达按钮;把 .js / .json 拖进窗口,或在空白处粘贴网址 / 代码,直接进入添加音源
  • 日常:最近播放、续播上次进度、搜索历史、定时关闭(含「播完这首」)、提前取好下一首地址、播放列表拖动排序、右键 / 长按菜单、快捷键表(?)、暂停继续淡入淡出、滚轮调音量
  • 稳定性:每个音源单独超时(默认 15 秒),搜索结果边到边显示并去重,显示「还在等哪些音源」;取地址和歌词也加了超时
  • 手机:底部标签栏 + 「我的」页(歌单在手机上也能进了)、播放条和唱片左右滑切歌、返回键先关浮层再回搜索页、触屏加大点击区域
  • 桌面:托盘菜单(播放控制、桌面歌词、退出)、关闭到托盘(可在设置关掉)、单实例、记住窗口位置和大小、托盘提示当前歌曲
  • 动效:封面从播放条飞入唱片、黑胶缓起缓停、模糊封面背景交叉淡入、按方向的页面切换、导航滑块、爱心粒子、按钮涟漪、进度条悬停时间、弹窗关闭动画

安装包

  • 每个系统只出一个安装包:Windows -setup.exe(中文界面、免管理员、可在完成页勾选桌面快捷方式)、macOS .dmg、Linux .AppImage / .deb、安卓 .apk
  • Release 说明和 README 写了「下载哪个、怎么装」

平台

  • 桌面:透明置顶的桌面歌词窗口(可拖动、锁定穿透),系统媒体控制走 WebView 的 Media Session
  • 安卓:plugins/tauri-plugin-media-session,Kotlin 前台服务 + MediaSession,用来后台、锁屏播放,并提供通知栏和耳机按键控制
  • Tauri HTTP 插件开启 unsafe-headers,音源可以设置 Referer / User-Agent,也没有跨域限制

CI / 发布

  • ci.yml:测试、网页构建、Linux 编译检查
  • release.yml:Windows / macOS / Linux 安装包和安卓 APK;PR 上只打包并上传 Artifacts,推送 v* 标签时生成草稿 Release
  • deploy-web.yml:手动触发部署到 Cloudflare Pages(需要 CLOUDFLARE_API_TOKEN、CLOUDFLARE_ACCOUNT_ID)

已验证

  • npm test:9 项通过(JSON 源、MusicFree 插件、洛雪源加密与取地址、MusicFree 搜索交给洛雪源、自动换源、歌词解析、歌曲匹配、慢音源超时与边搜边出)
  • 浏览器端到端测试(桌面和手机尺寸):示例歌曲能播放、歌词同步、菜单 / 收藏 / 全屏页 / 设置正常,没有横向滚动;第二轮另测了欢迎引导、返回键关全屏和回搜索页、拖动排序(鼠标和触摸)、右键菜单、粘贴导入音源、一快一慢两个音源边搜边出
  • cargo check 通过;Linux 调试版在虚拟显示器里启动正常
  • 未在本地验证:安卓构建(这个环境访问不了 Android SDK)、Windows 和 macOS 打包,交给本 PR 的 Actions 验证

未做 / 已知限制

  • 网页版受跨域限制,大多数插件和洛雪源只能在桌面版和安卓版里使用
  • 需要特定请求头才能播放的音频地址,<audio> 带不上这些请求头,可以先下载再播放
  • 安卓悬浮歌词留到下一版

Generated by Claude Code

Makima667 and others added 25 commits October 26, 2026 09:20
- 音源运行时:MusicFree 插件(含订阅)、洛雪自定义源、JSON 配置源、JS 脚本源
- 取地址调度:本源 → 洛雪源 → 失败自动换源
- 搜索、播放列表、我喜欢与歌单、下载、LRC 歌词与翻译、本地文件
- 动效:封面取色背景、黑胶唱片、律动条、卡拉 OK 歌词
- Tauri 2 桌面版(桌面歌词窗口)与安卓版(前台服务 + 媒体通知插件)
- GitHub Actions:CI、桌面/安卓打包、Cloudflare Pages 部署
新用户:首次欢迎引导、搜索页上手提示、空状态直达按钮;把 .js/.json 拖进窗口或粘贴网址/代码即可导入音源
日常:最近播放、续播上次进度、搜索历史、定时关闭、预取下一首地址、播放列表拖动排序、右键/长按菜单、快捷键表、暂停继续淡入淡出、滚轮调音量
稳定性:每个音源单独超时,搜索结果边到边显示并去重;取地址、歌词也加超时
手机:底部标签栏和「我的」页、播放条/唱片左右滑切歌、返回键先关浮层再回搜索页、触屏加大点击区域
桌面:托盘菜单、关闭到托盘、单实例、记住窗口位置和大小、托盘提示当前歌曲
动效:封面从播放条飞入唱片、黑胶缓起缓停、模糊封面背景交叉淡入、按方向的页面切换、导航滑块、爱心粒子、按钮涟漪、进度条悬停时间、弹窗关闭动画
- Windows 安装程序加 installer-hooks.nsh,装完在桌面创建快捷方式,卸载时删除;中文界面、当前用户安装(不需要管理员权限)、使用应用图标
- 打包产物精简为每个系统一个:Windows -setup.exe、macOS .dmg、Linux .AppImage 和 .deb(去掉 .msi 和 .rpm,避免一个系统两个安装包)
- 补上 publisher / homepage / copyright
- Release 说明和 README 增加「下载哪个文件、怎么装」的表格
上一版 Windows 打包失败。Tauri 的 NSIS 安装程序本身就在完成页提供「创建桌面快捷方式」选项,
不需要再用钩子重复创建;同时把版权字符串里的 © 换成 ASCII,避免写入版本信息时出错。
Tauri 自带的 NSIS 里没有 SimplifiedChinese.nlf 语言文件,makensis 打包失败,
安装界面先用默认的英文。
之前 PR 的每次运行都会往同一个草稿 Release 里追加文件,里面混进了旧的 .msi 和 .rpm。
现在只有推送 v* 标签或手动运行时才创建 Release。
新增 src/sources/bundled/:5 个洛雪源 + 9 个 MusicFree 插件(网易云、QQ音乐、酷狗、
酷我、汽水、B站、喜马拉雅、千千、YouTube),用 Vite ?raw 打进包内,首次启动由
seed.js 写入音源列表,不再需要用户自己找音源。

- 幂等:删除的内置源记在 bundledRemoved,不会被偷偷加回来
- 「音源」页新增「恢复内置音源」,用于误删恢复与版本升级补源
- tests/bundled.test.js:用应用自己的 compileSource 校验每个内置源可编译、
  且能力声明正确(洛雪源不可搜索、MusicFree 源可搜索可取址)
- README 同步:安装说明、音源接入、声明
- 新增内置:网易云官方直连(wy-official)、QQ音乐官方直连(qq-official)
- 移除内置:元力WY/KG/KW/QQ/MG、网易音乐、酷狗简云、酷我、汽水、B站、
  喜马拉雅、千千、YouTube —— 体检里不是空结果就是取不到地址
- BUNDLE_VERSION 1 → 2,老用户点「恢复内置音源」即可换新
- 版本号 0.2.0 → 0.2.1(package.json / tauri.conf.json / Cargo.toml / main.js)
- 测试断言同步:内置 MusicFree 源下限 6 → 3

体检依据:34 个插件真跑一遍(搜索 → 取地址 → Range 验播放),
能出声的只有 9 个,其中 2 个是本轮新写的官方直连。
- 恢复 5c295b0 的安卓通知栏/耳机按键修复、桌面全局快捷键、喜欢按钮等改动
- 内置音源:撤掉元力系与体检失败项,只留 5 个洛雪源 + 网易云官方直连、
  QQ音乐官方直连、腾讯音乐(BUNDLE_VERSION=2)
- README、release.yml 的说明同步;测试 16 项通过
- bundled 新增 kg-official(酷狗官方搜索,带 hash/albumId)
- BUNDLE_VERSION 2 → 3;版本 0.2.1 → 0.2.2
- 链路实测(应用运行时 + 真网络):搜《晴天》→ 首条 hash 正确 → 播放时
  官方取地址撞付费墙 → 自动接力洛雪源 → 206 audio/x-flac 30.2MB 941kbps
- 发布说明同步:内置 9 个源
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant