Skip to content

Latest commit

 

History

History
50 lines (43 loc) · 3.08 KB

File metadata and controls

50 lines (43 loc) · 3.08 KB

The story of Musium

TL;DR

Ruud van Asseldonk使用Rust和自研工具构建了基于树莓派的音乐播放器Musium,实现本地音乐播放、元数据搜索和个性化推荐,具备良好可控性,并持续优化功能。

Summary

本文介绍了Ruud van Asseldonk自建音乐播放器Musium的项目历程、技术实现与功能特性。

项目背景与动机

  • Musium是一个运行在树莓派上的音乐播放器,通过本地网络网页控制,连接客厅音箱。
  • 项目始于作者对现有流媒体服务(如Sonos、Chromecast Audio)的不满,包括价格昂贵、软件不稳定及功能限制。
  • 核心目标是构建一个完全自定义、符合个人需求的音乐播放系统,强调可控性和可靠性。

技术实现

  1. 音频处理基础
    • 使用自研FLAC解码器Claxon(2014年用Rust开发),确保对音频文件的完全控制。
    • 配套开发WAV文件库Hound,因早期Rust生态缺乏相关工具。
  2. 后端架构
    • 基于树莓派构建HTTP服务器,支持FLAC文件流传输和元数据索引。
    • 采用SQLite持久化数据,并开发工具Squiller生成Rust的SQL绑定。
    • 优化磁盘I/O(如调整内核参数、多线程读取)以提升大量小文件索引效率。
  3. 前端开发
    • 选用PureScript(避免NPM/Node.js依赖)构建网页界面。
    • 自研DOM操作库,支持声明式UI构建与精准节点控制(如波形进度条、动画交互)。
  4. 硬件调整
    • 弃用Chromecast(因API缺陷和连接不稳定),改用USB音频接口直接输出音频。

核心功能特性

  • 播放控制:支持播放、音轨切换(但暂停功能尚未实现)。
  • 个性化功能
    • 预/后播放钩子:通过Ikea Trådfri插座自动开关音箱。
    • Last.fm记录与导入:备份听歌历史并同步多设备数据。
    • 高通滤波器(55Hz):抑制低频共振,避免扰邻。
    • 实时搜索:归一化文本索引,支持前缀匹配和多维度排序(如词频、位置)。
    • 专辑封面占位:提取主色调减少加载闪烁。
  • 数据分析与推荐
    • 追踪播放计数(多时间尺度衰减),支持“发现”排序(推荐久未播放的热门专辑)。
    • 时间向量嵌入:基于收听时间(小时、星期、年日)推荐情境化音乐。
    • 实验性嵌入模型:尝试从收听历史学习音乐关联(类似word2vec),但尚未实现流派聚类。

项目意义与衍生影响

  • Musium作为“轮子重构”项目,融合音频处理、数据库、UI/UX及机器学习,成为作者的技术试验场。
  • 衍生工具(如Squiller、自研解析器)应用于其他项目(如幻灯片语言Pris、数据库Noblit)。
  • 强调自建软件的乐趣:完全控制、精准满足需求,并持续优化(如性能、用户体验)。

未来方向

  • 计划实现暂停功能。
  • 探索房间声学校正(如REW工具)和改进推荐算法(融合ListenBrainz等外部数据)。