水族馆

msw-open-music 个人音乐串流站

我做了一个简单(但很好用)的音乐串流软件,附带一个网页前端。虽然简单,但这是我做过最有用的东西了。

阅读时间 1 分钟


前言

可能我是属松鼠的,喜欢屯资源(我相信大部分人都跟我一样),买几个超大硬盘疯狂下载喜欢的电影、游戏、音乐、电子书,想象在无限久远之后有空全部欣赏完。

结果呢?屯到硬盘满了,要么选择再买硬盘,要么忍痛删掉一些从未打开过的资源。

这很可惜,各位松鼠 24 小时挂着 BitTorrent 冷门资源,夜以继日忍受 20k/s 的速度等待资源下载完成,不就是想留住那些,小众但自己十分中意的资源,将来有一天茶余饭后拿出来看看:「啊,我知道这个,真怀念啊」。

我呢?硬盘有一半都是 flac 音乐。数量多到可能这辈子都听不完。可是我又不可能一直坐在 NAS 旁边带着耳机听,大多时候只能在外面,用手机通过 500k/s 上传速度的家用宽带与 NAS 相连。

这就是我的需求:能够让我在任何地方使用浏览器,以自定义码率播放 NAS 中的音乐。同时因为音乐数量众多,我需要随机播放功能和搜索功能。于是本项目 msw-open-music 诞生了。

功能介绍

demo1

前端使用 Vue,后端使用 Golang + sqlite。单文件部署方便,无需另外安装数据库。

I’m Feeling Lucky

随机播放。

后端返回 10 条随机文件数据,点击文件名弹出播放/下载/分享选项,点击文件夹名查看文件夹中的所有文件。

Files

搜索记录在数据库中的所有文件,支持 SQL LIKE 匹配符,如 % 代表任意数量的任意字符串。

Folders

所搜文件夹,同上,点击文件夹名查看文件夹中的所有文件。

Manager

管理界面,操作前输入 token,与后端配置文件中的 token 一致即可更新、重置数据库。

底部播放器

依次显示的是 文件名、文件夹名、文件大小/转码后的文件大小、停止按钮。

Prepare 即预先在后端对文件转码,转码完成后前端再进行播放。若没有这个选项,断点续传将不可用,不稳定网络环境可能会导致播放中断。

Raw 即不转码,直接播放源文件。支持断点续传。

如图所示,当前使用后端提供的名为 0.OPUS 128K 的 ffmpeg 配置,参数是 -c:a libopus -ab 128k, 后端使用这个参数对文件进行转码后回传。源文件大小 20M,转码后大小 2,747K。

后端说明

去看 README.md

后端是 Golang + sqlite (cgo),简单,跨平台,部署方便,占用小,速度快。

后记

因为我下载了一堆 Vocaloid 音乐,数量多到我都不知道该听什么。随机播放这个功能让我发现了很多「宝藏」p 主,很多小众、不为人知,但很符合我的音乐审美的歌曲。只需要浏览器即可听歌,图书馆、教室、路上,只要有浏览器音乐就不会停,甚至能够在低配置的墨水屏设备上享受音乐。简单的分享功能,几个朋友在站内找到喜欢的音乐后可以很简单地分享给我……

我有一个信念,音乐、文章、画作等艺术创作品,它的价值不应随时间流逝而减少。也就是说,10 年前的歌曲,和一小时前投稿的歌曲,对我来说价值都是一样的。目前各大流媒体的推荐算法,都是给新投稿的歌曲赋予更高的推荐权重。虽然这么做有利于新歌曲推广,但无形中埋没了很多有价值的老歌。

网易云在歌曲推荐放面已经下了很大功夫了,能够推荐到很多年代久远的冷门好歌。但这还对我来说还不够,与其被动地等待被推荐,我更喜欢主动寻找。

基于这个原因,我大部分时间都在使用随机播放,并且随机播放缺失给我带来很多惊喜,一首满是片假名看不懂的歌曲,播放前充满了未知,播放到一半过后旋律渐入佳境,播放完后忍不住点开文件夹,欣赏整个专辑的歌曲,如此发现新宝藏。

没有用到什么复杂的技术,简单到可能连 Database 课程作业的要求都没到,但几个月使用下来,这真的是我写过最有用,使用次数最多,真正解决问题的软件了。