- URL: https://ruudvanasseldonk.com/2025/musium
- Added At: 2025-09-22 14:39:26
Ruud van Asseldonk使用Rust和自研工具构建了基于树莓派的音乐播放器Musium,实现本地音乐播放、元数据搜索和个性化推荐,具备良好可控性,并持续优化功能。
本文介绍了Ruud van Asseldonk自建音乐播放器Musium的项目历程、技术实现与功能特性。
项目背景与动机
- Musium是一个运行在树莓派上的音乐播放器,通过本地网络网页控制,连接客厅音箱。
- 项目始于作者对现有流媒体服务(如Sonos、Chromecast Audio)的不满,包括价格昂贵、软件不稳定及功能限制。
- 核心目标是构建一个完全自定义、符合个人需求的音乐播放系统,强调可控性和可靠性。
技术实现
- 音频处理基础:
- 使用自研FLAC解码器Claxon(2014年用Rust开发),确保对音频文件的完全控制。
- 配套开发WAV文件库Hound,因早期Rust生态缺乏相关工具。
- 后端架构:
- 基于树莓派构建HTTP服务器,支持FLAC文件流传输和元数据索引。
- 采用SQLite持久化数据,并开发工具Squiller生成Rust的SQL绑定。
- 优化磁盘I/O(如调整内核参数、多线程读取)以提升大量小文件索引效率。
- 前端开发:
- 选用PureScript(避免NPM/Node.js依赖)构建网页界面。
- 自研DOM操作库,支持声明式UI构建与精准节点控制(如波形进度条、动画交互)。
- 硬件调整:
- 弃用Chromecast(因API缺陷和连接不稳定),改用USB音频接口直接输出音频。
核心功能特性
- 播放控制:支持播放、音轨切换(但暂停功能尚未实现)。
- 个性化功能:
- 预/后播放钩子:通过Ikea Trådfri插座自动开关音箱。
- Last.fm记录与导入:备份听歌历史并同步多设备数据。
- 高通滤波器(55Hz):抑制低频共振,避免扰邻。
- 实时搜索:归一化文本索引,支持前缀匹配和多维度排序(如词频、位置)。
- 专辑封面占位:提取主色调减少加载闪烁。
- 数据分析与推荐:
- 追踪播放计数(多时间尺度衰减),支持“发现”排序(推荐久未播放的热门专辑)。
- 时间向量嵌入:基于收听时间(小时、星期、年日)推荐情境化音乐。
- 实验性嵌入模型:尝试从收听历史学习音乐关联(类似word2vec),但尚未实现流派聚类。
项目意义与衍生影响
- Musium作为“轮子重构”项目,融合音频处理、数据库、UI/UX及机器学习,成为作者的技术试验场。
- 衍生工具(如Squiller、自研解析器)应用于其他项目(如幻灯片语言Pris、数据库Noblit)。
- 强调自建软件的乐趣:完全控制、精准满足需求,并持续优化(如性能、用户体验)。
未来方向
- 计划实现暂停功能。
- 探索房间声学校正(如REW工具)和改进推荐算法(融合ListenBrainz等外部数据)。