Go to file
Atdunbg 65ed71503e feat: 架构重构与跨平台媒体控制集成
## 后端

- 替换 rodio 为 symphonia + ringbuf,重构 audio.rs 播放引擎
- 重构 api.rs,使用 api_call! 宏统一 API 调用模式
- 新增 media_controls.rs,使用 souvlaki 实现跨平台系统媒体控制
  (Linux MPRIS / Windows SMTC / macOS Now Playing)
- 版本号升至 v0.5.0

## 前端 - 新增

- 新增 SongListItem 通用组件
- 新增 useOnlineStatus composable,检测网络状态
- 新增 usePageCache composable,页面数据缓存与失效
- 新增 getCoverUrl()、formatDate() 工具函数
- 新增 emitPlaybackState() 同步播放状态到系统媒体控制
- 新增 mpris-command 事件监听,响应系统媒体控制命令
- 新增 Toast 离线/恢复在线提示
- 各页面新增断网恢复后自动重试加载
- 新增路由守卫:已登录用户访问 /login 重定向至首页
- 新增音量持久化(settings store + localStorage)
- 新增禁用右键菜单与用户选择限制(输入框除外)

## 前端 - 变更

- Song 接口从 player.ts 迁移至 song.ts 并导出
- AlbumDetail/ArtistDetail/PlaylistDetail/RecentPlays/LocalMusic 迁移至 SongListItem
- PlayerBar 队列列表迁移至 SongListItem,封面使用 getCoverUrl()
- downloadSong 参数类型从内联对象改为 Song,使用 getCoverUrl()
- 默认主题从 green 改为 blue,ThemeName 及相关列表中 blue 移至首位
- 全局快捷键从 Alt+Control 改为 Control+Alt 顺序
- formatShortcut 新增 KeyP → P 显示
- keep-alive 从 max=3 固定 include 改为 max=5 动态列表,窗口隐藏时释放
- App.vue 封面使用 getCoverUrl() 替代手动 al/album 回退
- formatPlayCount 提取常量
- Login.vue text-warning 改为 text-yellow-400

## 前端 - 删除

- 删除 Search.vue(与 Discover.vue 重复)
- 删除 SongItemMenu.vue(被 SongListItem 替代)

## 修复

- 更新器跳过版本逻辑:仅静默检查时跳过已忽略版本,手动检查不再跳过
- 重复播放同一首歌时无法恢复播放
- settings.ts 重复的 ThemeName 定义
- PlayerBar.vue modeTexts 缺少类型注解
- Home.vue map 回调参数缺少类型
- Settings.vue v-for key 类型不匹配
2026-05-23 14:43:47 +08:00
2026-05-07 22:27:55 +08:00
2026-05-07 22:27:55 +08:00
2026-05-07 22:27:55 +08:00
2026-05-07 22:27:55 +08:00
2026-05-16 12:17:41 +08:00
2026-05-07 22:27:55 +08:00

Nekosonic

一款轻量的跨平台音乐播放器,支持 Windows / Linux / macOS音源源自网易云音乐。

特性

播放

  • 🎵 在线音乐播放,流式缓冲边下边播
  • 🎵 多音质选择(标准 / 较高 / 极高 HQ / 无损 SQ / Hi-Res
  • 🔄 播放模式切换(列表循环 / 随机播放 / 单曲循环)
  • ⏯ 播放控制(播放 / 暂停 / 上一首 / 下一首 / 进度跳转 / 音量调节)
  • 📋 播放队列管理(查看队列 / 移除歌曲 / 清空队列)
  • 📻 私人漫游 FM个性化推荐VIP 试听自动跳过)
  • 🎵 本地音乐播放(支持 mp3 / flac / wav / ogg / aac / m4a / wma / opus
  • 🔊 音频输出设备选择
  • 🎧 系统媒体控制(蓝牙耳机/键盘媒体键/系统面板,支持 Linux / Windows / macOS

发现与浏览

  • 🔍 关键词搜索歌曲 + 热门搜索标签
  • 📋 歌单浏览(推荐歌单 / 排行榜 / 用户歌单 / 收藏歌单)
  • 📋 歌单详情(歌曲列表 + 收藏 / 取消收藏 + 歌单评论)
  • 🎤 歌手详情(热门歌曲 / 专辑 / 简介)
  • 💿 专辑详情(歌曲列表 + 播放全部)
  • 📅 每日推荐歌曲

歌词与评论

  • 🎤 实时滚动歌词(自动滚动 / 点击跳转 / 渐变透明度)
  • 🎤 歌词翻译显示
  • 🎤 全屏漫游模式(大封面 + 歌词 / 评论双标签页)
  • 💬 歌曲评论查看(热门评论 + 无限滚动加载 + 点赞)

收藏与下载

  • ❤️ 一键喜欢 / 取消喜欢(同步到网易云账号)
  • ⬇️ 歌曲下载(带进度显示 / VIP 拦截 / 元数据保存)
  • 🎵 本地音乐管理(列出 / 播放 / 删除 / 音频元数据与封面读取)
  • 🕐 本地播放历史记录(最多 200 首)

账号

  • 🔴 网易云账号登录(二维码扫码 / 手机号密码)
  • 🔑 登录态持久化(重启后自动恢复)

系统与设置

  • 📡 系统托盘(播放控制 / 显示窗口 / 退出)
  • 🛡 单实例运行(防止重复启动)
  • ⌨️ 自定义快捷键(应用内 + 系统全局)
  • 🎨 多主题切换(天蓝 / 翠绿 / 玫红 / 紫罗兰 / 橙色 / 青色 / 粉色)
  • ⚙️ 关闭窗口行为设置(每次询问 / 最小化到托盘 / 直接退出)
  • 🔄 自动更新(启动静默检测 + 自定义弹窗 + 忽略版本 + 下载进度)
  • 📝 更新日志查看
  • 📶 网络状态检测(断网/恢复 Toast 提示 + 自动重试加载)

📦 安装

访问本项目的 Releases 页面下载安装包。

💻 配置开发环境

# 安装前端依赖
npm install

# 启动开发服务器
npm run tauri dev

# 构建发布
npm run tauri build

环境要求

  • Node.js >= 18
  • Rust >= 1.70
  • Tauri CLI 2

🛠 技术栈

层级 技术
桌面框架 Tauri 2
前端 Vue 3 + TypeScript
样式 Tailwind CSS v4 + CSS 变量主题系统
状态管理 Pinia
路由 Vue Router 4
音频解码 symphonia + ringbuf (Rust)
媒体控制 souvlaki (Linux MPRIS / Windows SMTC / macOS Now Playing)
网易云 API ncm-api-rs
构建工具 Vite 6

☑️ Todo

  • 评论系统
  • 歌曲下载
  • 本地音乐管理
  • 歌手详情页
  • 专辑详情页
  • 自定义全局快捷键
  • 自动更新
  • 歌词翻译
  • 更多主题
  • 系统媒体控制(蓝牙耳机/键盘媒体键)
  • MV 播放
  • 音乐云盘
  • 桌面歌词

欢迎提 Issue 和 Pull request。

📜 开源许可

本项目仅供个人学习研究使用,禁止用于商业及非法用途。

基于 MIT license 许可进行开源。

致谢

  • ncm-api-rs — 网易云音乐 API 的 Rust 封装
  • Tauri — 跨平台桌面应用框架
  • Vue.js — 渐进式 JavaScript 框架
  • Tailwind CSS — 实用优先的 CSS 框架
  • symphonia — Rust 纯音频解码库
  • souvlaki — 跨平台 OS 媒体控制库
Description
No description provided
Readme 5.9 MiB
Languages
Vue 55.5%
Rust 26.5%
TypeScript 17%
CSS 0.9%