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音频

Download history 1/week @ 2024-04-28 1/week @ 2024-05-19 4/week @ 2024-06-02 2/week @ 2024-06-09 12/week @ 2024-07-28 119/week @ 2024-08-04 11/week @ 2024-08-11

每月 142 次下载

GPL-3.0 许可证

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

导航栏(屏幕顶部)

  • 随机播放(开启/关闭)
  • 重复(开启/单次/关闭)
  • 停止/播放/暂停
  • <时间歌曲> -> <歌曲长度>
  • <歌曲#>/<#的歌曲播放列表>
  • <曲目标题>

在左侧

  • 播放列表信息
  • 曲目信息
  • 当前配置的快捷键

在右侧

  • 曲目选择:列出曲目编号和标题。
  • 播放列表选择:列出播放列表名称。
  • 默认情况下,键绑定 jk 用于上下导航,hl 用于在曲目和播放列表选择之间切换,而 <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或类似的命令!

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 nightly
  • clang + 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 来启动播放器。

在中间,您可以看到当前播放列表中的曲目列表。您可以使用 jk 来滚动此列表,并使用 enter 来播放曲目。

有关更多详细信息,请参阅UI指南

所有这些快捷键以及其他快捷键都列在左下角!

创建自己的!

查看它的工作原理以了解如何创建自己的播放列表,甚至源!

其他

在您的 ${directory} 中使用 DMM

要将 <path> 作为音乐目录的路径,而不是当前目录,创建一个包含以下内容的 .dmm-link.ron 文件

Link(
    music_directory: "<path>"
)

依赖关系

26–60MB
~1M SLoC