Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RIMusic

一个用 Rust + Iced 构建的本地音乐播放器 —— 名字的由来:RI = Rust + Iced。


✨ 功能

  • 🎵 本地音乐播放 —— 支持 mp3 / wav / ogg
  • 🏷️ 标签系统 —— 给歌曲打上自定义标签,自由分类
  • 🎤 艺术家视图 —— 按艺术家自动归类,没有艺术家信息的归入「群星」
  • 🔍 搜索 —— 支持按文件名或艺术家名模糊搜索
  • 🔁 四种播放模式 —— 单曲即停 / 单曲循环 / 下一曲 / 随机播放
  • 🎨 可自定义主题 —— 实时调整背景色、文字色、强调色、警示色
  • 💾 持久化 —— 搜索源、标签、播放状态、主题,重启后完整恢复
  • ⚡ 异步加载元数据 —— 启动秒开,后台分批读取时长和艺术家
  • 🌫️ 空状态文案 —— 每个空页面都有专属的一句话,不是冷冰冰的「暂无数据」

🚀 快速开始

依赖

  • Rust 1.75+
  • 系统音频库(rodio 依赖):
    • Windows:无需额外配置
    • macOS:无需额外配置
    • Linux:libasound2-dev(Debian/Ubuntu)或 alsa-lib-devel(Fedora)

编译运行

git clone https://github.com/0x8000S/RIMusic
cd RIMusic
# 调试模式
cargo run

# 发布模式
cargo build --release
./target/release/RIMusic

配置文件位置

RIMusic 使用 confy 保存配置:

平台 路径
Windows %APPDATA%\rimusic\
macOS ~/Library/Application Support/rimusic/
Linux ~/.config/rimusic/

主题配色单独存储在 theme.toml 中。


🏗️ 项目结构

src/
├── main.rs          # 入口 + 窗口设置
├── app.rs           # RIMusic 主结构体(组装层)
├── backend.rs       # 后台消息处理(Sync / ReadFileData / CloseSave)
├── ui.rs            # UI 渲染 + UI 消息处理
├── state.rs         # 所有状态枚举 + 颜色调色板
├── config.rs        # Settings + SettingKeys
├── player.rs        # 播放引擎(rodio 封装)
├── store.rs         # 数据存储 + 索引 + 异步读取
└── music_file.rs    # 音乐文件元数据读取

架构要点

  • 消息分层:Message 分为 UiMessage(用户操作)和 BackendMessage(系统定时任务),职责清晰
  • UiArgs 统一上下文:UI 层通过 UiArgs 借用 player / store / settings,避免参数爆炸
  • 关注点分离:UI 渲染、播放逻辑、数据管理、配置持久化各自独立

🎨 主题配色

ColorPalette 包含六个可调色槽:

色槽 用途
background 全局背景
text 文字及边框
primary 强调色(按钮、标题)
success 成功状态(暂未使用)
danger 危险操作(删除)
warning 警告状态

在「设置 → 外观」中点击色块即可打开取色器实时修改。整套配色会保存到 theme.toml。


🛠️ 技术栈

库 用途
iced GUI 框架
iced_aw 扩展组件(Menu / ColorPicker)
rodio 音频播放
lofty 音频元数据读取
confy 配置持久化
serde 序列化 / 反序列化
rfd 原生文件选择对话框

📜 开发历史

RIMusic 最初是一个用 Python + Flet 写的项目(名为 LPMusicPlayer,LowPython Music Player)。后来决定用 Rust + Iced 重写,经历了多次重构:

版本 特征
V0 单细胞版本,能出声就行
V0.5 功能爆发(标签、侧边栏、模态框),结构开始混乱
V1 第一次重构,抽出 Player 和 CommonWidget
V2 功能完整,抽出 MusicStore ,但 main.rs 膨胀到 1400 行
V3 拆分为 9 个模块,消息分层,架构清晰
V3.5 加入主题自定义、搜索增强

🙏 致谢

  • 代码编写:氢気氚
  • 美术创作:KEVIN-07
  • README 编写: DeepSeek

“空空如也,像冬天的落叶一样。”

About

用Rust编写的音乐播放器

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages