Skip to content

使用 Electron 和 Vite 构建的跨平台媒体播放器,旨在提供一个集本地播放、在线搜索与下载、以及丰富视觉体验于一体的现代化解决方案。其界面设计灵感来源于 Spotify,注重美观与用户体验。

License

Notifications You must be signed in to change notification settings

git-hub-cc/Player

Repository files navigation

Player - 一款功能强大的现代化媒体播放器

Player 是一款使用 Electron 和 Vite 构建的跨平台媒体播放器,旨在提供一个集本地播放、在线搜索与下载、以及丰富视觉体验于一体的现代化解决方案。其界面设计灵感来源于 Spotify,注重美观与用户体验。


📸 预览

主播放界面 (音频) 同步歌词 & 快捷键设置
主播放界面 歌词和设置
无限画廊背景 在线搜索与本地导入
无限画廊 搜索和导入

✨ 核心特性

▶️ 核心播放功能

  • 多媒体支持: 同时支持本地音频与视频文件播放。
  • 播放列表管理: 直观的播放列表,支持搜索(拼音/首字母)、删除和排序。
  • 多种播放模式: 提供列表循环、单曲循环和随机播放模式。
  • 可自定义快捷键: 支持用户自定义全局快捷键,包括长按与短按组合(如长按快进、短按步进),提升操作效率。
  • 倍速播放控制: 支持在播放时动态加速或减速,并通过UI实时反馈。
  • 状态持久化: 自动保存播放进度、音量、播放模式等状态,下次打开时无缝衔接。

🎨 丰富的视觉体验

  • 现代化UI: 灵感源于 Spotify 的现代化、美观且用户友好的界面设计。
  • 动态渐变背景: 自动从歌曲封面或视频帧中提取颜色,生成流畅的动态渐变背景。
  • 音频可视化: 在播放音频时,专辑封面周围会产生与音乐节奏同步的动态光效。
  • 无限画廊: 在播放器外的空白区域拖拽,即可在无限滚动的专辑封面画廊中漫游,点击封面直接播放。
  • 沉浸式视图与屏保: 双击播放区域可进入无边框沉浸模式;F11键可启动无限画廊自动滚动的屏保模式。

🎵 内容管理与获取

  • 在线音乐搜索 (VIP支持): 内置在线音乐搜索引擎,并能智能识别会员歌曲。播放时会先加载试听版本,同时在后台无缝获取并切换到完整音源,保证流畅体验。
  • 一键缓存: 搜索到的在线歌曲(包括会员歌曲的完整音源)可一键下载到本地媒体库,并自动保存封面和歌词。
  • 跨平台文件关联: 在 Windows, macOS 和 Linux 上均可将 Player 设置为 .mp4, .mkv, .mp3 等多种媒体文件的默认打开方式。
  • 拖拽导入: 支持直接将音频或视频文件拖拽到播放器窗口,快速添加到媒体库。
  • 本地媒体库导入: 强大的本地文件夹导入功能,可递归扫描指定目录,智能匹配同名的音频、封面和歌词文件,并将其复制到应用媒体库中。
  • 智能封面生成: 当任何本地导入的歌曲缺少封面时,能根据歌曲标题自动生成风格化的占位封面图。
  • 多平台链接解析: 支持粘贴 某音/某B 等平台的分享链接,直接下载无水印视频到本地。

🎤 歌词与交互

  • LRC歌词同步: 完美支持 .lrc 格式的歌词文件,并实现逐行高亮同步滚动。
  • 歌词拖拽定位: 支持在歌词界面拖拽歌词,快速定位到歌曲的任意时间点。

🛠️ 技术栈

  • 桌面端框架: Electron
  • 构建工具: Vite + Electron Forge
  • 前端: HTML5, CSS3, Vanilla JavaScript (ESM)
  • 后端 (Main Process): Node.js
  • 核心库:
    • axios: 用于处理网络请求。
    • pinyin-pro: 为播放列表和搜索提供强大的中文拼音支持。
    • yt-dlp-wrap-plus: 用于解析 YouTube 等平台链接。
    • m3u8-parser: 用于解析 HLS (m3u8) 视频流。
    • canvas: 用于在后端生成占位封面图。
    • p-limit: 控制并发下载,防止请求过多。
  • 特色实现:
    • 依赖注入 (DI): 后端采用轻量级DI容器管理服务依赖,代码结构清晰,易于测试和扩展。
    • 服务/提供者架构 (策略模式): 将不同下载源(如B站、抖音)的实现逻辑封装在独立的Provider中,由DownloadService统一调度,易于新增支持。
    • 在线音乐服务适配层: 新增MusicApiService,封装并统一了在线音乐API(基于重构的Meting),实现了VIP歌曲识别、无缝切换和URL缓存等高级逻辑。
    • 文件关联: 通过 Electron ForgefileAssociationsMIME Type 配置,实现了跨平台的原生文件关联。
    • 自定义协议 (media://): 安全地从应用 userData 目录提供本地媒体文件。
    • IPC通信: 使用 contextBridge 在主进程和渲染进程之间安全通信。

🚀 开始使用

安装

您可以从项目的 Releases 页面下载适用于您操作系统的最新版本。

  • Windows: 下载 .exe 安装程序。

导入您的音乐

  1. 从文件夹导入: 点击右下角的 “添加资源” 图标 -> “导入本地资源” -> 选择您的音乐文件夹。
  2. 拖拽文件: 直接将一个或多个媒体文件拖拽到播放器窗口内。
  3. 文件关联: 在系统设置中将 Player 设为默认播放器后,双击媒体文件即可直接播放。

👨‍💻 开发与构建

环境要求

  • Node.js (建议 v18 或更高版本)
  • npmyarn

步骤

  1. 克隆仓库

    git clone https://github.com/git-hub-cc/Player.git
    cd Player
  2. 安装依赖

    npm install
  3. 运行开发环境 此命令将启动 Vite 开发服务器和 Electron 应用,并支持热重载。

    npm start
  4. 构建可执行文件 此命令将根据您的操作系统,使用 Electron Forge 构建最终的可执行文件和安装包,输出到 out 目录。

    npm run make

📂 项目结构

.
├── src/
│   ├── backend/             # 主进程核心后端逻辑
│   │   ├── meting/          # 重构的 Meting 音乐API引擎
│   │   ├── providers/       # 各平台链接解析器 (策略模式)
│   │   ├── services/        # 核心服务 (下载、媒体库、在线音乐适配层等)
│   │   ├── bootstrap.js     # DI容器配置
│   │   ├── container.js     # DI容器实现
│   │   └── main-api.js      # Electron主进程入口
│   ├── preload/             # Electron预加载脚本
│   └── renderer/            # 渲染进程UI与逻辑 (Vite根目录)
│       ├── css/
│       ├── js/
│       ├── assets/
│       └── index.html
├── forge.config.js          # Electron Forge 配置文件
└── package.json             # 项目依赖与脚本

🚀 未来计划 (Roadmap)

我们对 Player 的未来充满期待,以下是正在规划中的一些激动人心的功能:

媒体库与管理增强 (v2.x)

  • 目录式媒体库: 重构媒体库,支持以文件夹视图进行浏览和管理,并能实时监控目录变动,自动同步文件增删。
  • 内置媒体工具: 在右键菜单中加入实用工具,例如一键将 .mkv 视频无损转封装为兼容性更好的 .mp4 格式。

个性化与用户体验 (v2.x)

  • 专属设置页面: 新增一个独立的设置面板,用户可以在此管理核心组件(如下载或更新 FFmpeg/yt-dlp)、配置应用行为等。
  • 播放历史与进度记忆: 记录所有播放过的媒体,并记住每个文件的最后播放位置,方便下次继续观看或收听。

🌌 AI驱动的音乐探索:情绪星云 (v3.0 - 核心目标)

这是一项旨在彻底改变音乐浏览体验的创新功能。

  • 核心概念: 我们将不再局限于传统的列表式歌单,而是将您的整个音乐库可视化为一个可以自由探索的 3D情绪星云
  • 数据维度:
    • 每首歌曲都会成为星云中的一个“星球”,其在三维空间中的位置 $(x, y, z)$ 由歌曲的 情绪(Valence)能量(Energy)节奏感(Danceability) 决定。
    • 星球的 颜色 将由其封面主色调决定,标签(如 "Live", "Remix", "Acoustic")则通过智能分析文件名生成。
  • 交互体验:
    • 探索: 您可以用鼠标自由地拖拽旋转、滚轮缩放,沉浸式地漫游在由您的音乐构成的宇宙中。
    • 框选生成歌单: 最核心的交互——按住 Shift 键在星云中拖拽出一个选择框,所有被框选的“星球”(歌曲)将立刻被组合成一个新的播放列表。这意味着您可以直观地“画”出一个区域,来创建符合特定情绪和氛围的歌单(例如,“左下角那片安静、忧伤的区域”)。
  • 技术驱动: 此功能将由 Spotify 的音频分析API、高效的文件名标签匹配算法以及轻量级的原生JS 3D渲染引擎驱动,确保在不引入大型库的情况下实现流畅体验。对于无法匹配的歌曲,将考虑使用大语言模型进行辅助分析。

🙏 致谢 (Acknowledgements)

  • 在线音乐搜索与播放功能基于开源项目 Meting 进行了二次开发与集成。
  • 部分会员歌曲解析功能参考了 GD音乐台 (music.gdstudio.xyz) 提供的思路。使用过程如遇问题可 B 站私信:GD-Studio

⚠️ 免责声明 (Disclaimer)

本项目中使用的所有在线媒体资源均收集自互联网,仅供个人学习和技术研究使用,严禁用于任何商业用途。所有媒体内容的版权归原作者或其各自的版权所有者所有。

如果您继续使用本项目,即表示您同意并承诺遵守以上声明。如因使用不当产生任何法律纠纷,本人概不负责。如有侵权,请与我联系删除。

📜 许可证

本项目采用 MIT 许可证。

About

使用 Electron 和 Vite 构建的跨平台媒体播放器,旨在提供一个集本地播放、在线搜索与下载、以及丰富视觉体验于一体的现代化解决方案。其界面设计灵感来源于 Spotify,注重美观与用户体验。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published