6 个版本 (1 个稳定版)
1.0.0 | 2024 年 8 月 6 日 |
---|---|
0.6.0 | 2024 年 3 月 24 日 |
0.5.1 | 2024 年 2 月 5 日 |
0.4.0 | 2024 年 2 月 3 日 |
0.3.0 | 2024 年 2 月 1 日 |
#58 在 音频
每月 142 次下载
115KB
2.5K SLoC
DMM,声明式音乐管理器(& 播放器)
厌倦了依赖 Spotify 等服务?曾是 MPD 的用户,但讨厌手动收集音频文件?使用 NixOS,并想编辑更多配置?讨厌 YouTube,并想合法地*让他们不高兴?
如果您有这些情况之一,您应该尝试 DMM!
*我不是律师,但 yt-dlp 尚未下架!
目录
警告:DMM 的主分支更新迅速,这里的文档可能不准确。建议查看稳定分支的最新稳定版本。
工作原理
DMM,就像 Nix 一样,是 声明式 的。使用 DMM 播放音乐分为 3 步
有关 常规配置,请参阅入门,默认配置:/assets/dmm.default.ron
和示例配置:/examples/dmm.ron
1) 声明
第一步是在配置文件中定义您想要收听的音乐。
音乐目录:DMM 文件所在的 'root' 目录。其中包含 3 项
dmm.ron
:这是主要配置。在这里,您可以创建自定义快捷键,并更改设置playlists
:此目录包含您的播放列表,每个播放列表一个文件。sources
:此目录包含音乐 '来源'。这将在稍后进行更深入的说明。
您可能想使用 git 来管理对播放列表所做的任何更改,但请记住将 run/
和 cache/
添加到您的 .gitignore
!
1.1) 播放列表
每个播放列表都使用 <playlist-name>.ron
文件在 playlists/
目录中定义。播放列表文件包含以下内容
- 播放列表名称
- 导入:播放列表的任何 导入 来源(来自
sources/
目录) - 来源:播放列表的任何 非导入 来源(声明为内联)
- 曲目:每个曲目的定义,包括使用哪个来源以及该来源的输入
1.2) 来源
音乐播放器很好,但如果没有获取音乐的方法,就毫无用处。(咳嗽 咳嗽 mpd)
在这里,DMM提供了一个相当开放的解决方案,通过资源实现。目前只有一个,即 Shell
资源。这个资源运行一个shell命令来获取音频,允许与许多外部程序集成,例如 yt-dlp
。
以下是一个使用示例 yt-dlp 资源:/examples/sources/yt-dlp.ron
从链接 <youtube.com/watch?v=2TA3IKH8Y5c> 下载歌曲 Let It Snow。
Track(
meta: Meta(
name: "Let It Snow!",
artist: "Dean Martin",
),
src: "yt",
// This is the portion of the youtube link after `watch?v=`
input: "2TA3IKH8Y5c",
)
2) 获取
在定义了播放列表之后,DMM需要从资源收集音频,并将其保存在本地缓存中。
此功能目前非常简单,一些限制将在稍后解释。
要下载播放列表 Classic Christmas Songs
,导航到音乐目录的根目录并运行以下命令
dmm download playlist "Christmas Songs"
第三个参数(这里为“Christmas Songs”)用于在 playlists/
目录中搜索具有相似名称的所有播放列表。它可以是一部分,也可以与播放列表名称相似(程序将在继续之前询问您选择的播放列表是否正确)
您也可以使用以下命令
dmm download all
下载 playlists/
目录中的所有播放列表
2.1) 更新缓存
如果添加了新歌曲或源发生变化,则需要重新下载歌曲。这就像再次运行 dmm download
一样简单。
- 更改源 名称 或歌曲的名称/艺术家字段不会触发此操作
- 更改源的 命令 或 参数 将触发重新下载。目前没有方法告诉 dmm 不这样做。
2.2) 垃圾回收
当歌曲不再被播放列表引用时,它们将保留在缓存中,占用空间。要清理缓存(删除所有当前未引用的音频),请运行 dmm gc
3) 欣赏!
是时候听你辛苦赚来的音乐了!导航到音乐目录,并运行以下命令
dmm player
这会打开播放器用户界面,您可以在这里选择要播放的播放列表和曲目
并且请记住,特别是从音乐出版商那里盗版,是一种没有受害者的犯罪!
3.1) 音乐播放器 UI
导航栏(屏幕顶部)
- 随机播放(开启/关闭)
- 重复(开启/单次/关闭)
- 停止/播放/暂停
<时间内歌曲> -> <歌曲长度>
<歌曲#>/<#的歌曲内播放列表>
<曲目标题>
在左侧
- 播放列表信息
- 曲目信息
- 当前配置的快捷键
在右侧
- 曲目选择:列出曲目编号和标题。
- 播放列表选择:列出播放列表名称。
- 默认情况下,键绑定
j
和k
用于上下导航,h
和l
用于在曲目和播放列表选择之间切换,而<return>
用于选择高亮显示的项目。
安装
DMM 是基于 Linux 构建的,也是为 Linux 构建的。 它可能在 Windows 上工作,但您需要从源代码构建。
目前没有 {nixpkgs,AUR} 软件包(即将推出?),因此安装仅通过 nix flakes 或 crates.io 支持。
重要:在所有使用Nix的示例中,URL包含一个占位符,<version-name>
,必须替换为以下之一
stable
- 将自动下载最新的稳定版本nightly
- 将获取最新的夜间版本- 夜间版本将运行,但可能存在错误/破坏性更改/可能会破坏您缓存的特性
- 夜间版本不会有一个相关的git标签/版本
main
- 将下载最新的提交- 请勿使用:
main
分支通常会有问题! - 从“发布”标签中指定版本,例如
v<x>.<y>.<z>
<- 这不是实际最新的版本- 在1.0.0之后不建议使用:如果您选择此方法,则需要更新版本标签,以更新DMM以及使用
nix flake update
或类似的命令!
- 在1.0.0之后不建议使用:如果您选择此方法,则需要更新版本标签,以更新DMM以及使用
0) 从crates.io
不推荐:如果您可以通过真实的包管理器安装,请这样做
DMM已在crates.io打包,如果您已安装cargo和所需的依赖项,则运行 cargo install dmm
1) NixOS (Flake)
要安装dmm
flake,将其添加到您的系统配置中的inputs
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# -- snip --
# -- add this part --
dmm = {
url = "tarball+https://git.fawkes.io/mtnash/dmm/archive/<version-name>.tar.gz";
inputs.nixpkgs.follows = "nixpkgs";
};
};
然后,将适当的dmm软件包添加到您的packages
数组中
packages = with pkgs; [
inputs.dmm.packages.x86_64-linux.default
# -- snip --
];
有关如何执行此操作的信息,我发现这篇博客文章很有帮助
2) Nix Profile (Flake)
要使用nix profile
非声明性地安装dmm
,运行以下命令
nix profile install tarball+https://git.fawkes.io/mtnash/dmm/archive/<version-name>.tar.gz
2.1) Nix Build (Flake)
要构建但不安装dmm
,您可以使用nix build
nix build tarball+https://git.fawkes.io/mtnash/dmm/archive/<version-name>.tar.gz
可执行文件将位于./result/dmm
3) 从源码构建
依赖项
cargo
rustc
nightlyclang
+mold
(仅限Linux)alsa
(仅限Linux)
如果所有依赖项都正确构建,则只需运行 cargo build --release
即可,您的二进制文件将位于 target/release/dmm
入门
首先,您应该已安装dmm
,(可选,但示例播放列表使用它)yt-dlp
本指南(以及DMM总体上)假定您有一些使用Linux命令行的经验,如果您看到任何改进,请打开问题/PR!
您还应阅读如何工作的部分,这将帮助您理解如何自己创建新的播放列表和来源。
创建音乐目录
第一步是决定在哪里保存您的音乐。您可能希望将其保存在一个与您的其他音乐(如果您有的话)分开的目录中。本指南将假设您正在使用~/music
。
创建 music
目录后,使用 cd
进入该目录并运行 dmm init
。这将创建音乐目录的基本布局,以及一个名为 example
的播放列表。它还会导入示例 yt-dlp
源(/examples/sources/yt-dlp.ron
)。
播放示例播放列表
在您能播放播放列表之前,您必须从其源获取曲目。在 ~/music
中,运行 dmm download playlist 'example'
。下载命令将搜索该名称(可能是不完整的)并下载该播放列表的曲目。您也可以使用 dmm download all
一次性下载所有播放列表。
下载完成后,您就可以播放它了。运行 dmm player
来启动播放器。
在中间,您可以看到当前播放列表中的曲目列表。您可以使用 j
和 k
来滚动此列表,并使用 enter
来播放曲目。
有关更多详细信息,请参阅UI指南。
所有这些快捷键以及其他快捷键都列在左下角!
创建自己的!
查看它的工作原理以了解如何创建自己的播放列表,甚至源!
其他
在您的 ${directory} 中使用 DMM
要将 <path>
作为音乐目录的路径,而不是当前目录,创建一个包含以下内容的 .dmm-link.ron
文件
Link(
music_directory: "<path>"
)
依赖关系
26–60MB
~1M SLoC