#mpd #daemon #music #mpd-client #client-send

bin+lib mpdpopm

维护你的mpd服务器上的评分和播放次数

9次发布

0.3.3 2024年5月10日
0.3.2 2023年12月29日
0.3.1 2023年7月22日
0.3.0 2021年10月11日
0.1.13 2020年11月20日

数据库接口中排名 209

Download history 27/week @ 2024-05-04 107/week @ 2024-05-11 15/week @ 2024-05-18 1/week @ 2024-05-25

每月下载量 541

自定义许可

265KB
5.5K SLoC

目录

  1. 简介
  2. 你可以用它做什么?
  3. 许可证
  4. 先决条件
  5. 安装
    1. 使用预构建的二进制文件
    2. Crates.io
    3. 使用Debian软件包
    4. 使用Arch软件包
    5. Autotools源分发
    6. 从源代码构建
  6. 入门
    1. 程序结构
    2. 设置
      1. MPD
      2. mppopmd
      3. mppopm
  7. 状态 & 路线图

简介

mpdpopmMPD 提供了一个伴随的守护进程,用于维护播放次数、评分和最后播放时间戳,同时附带一个用于与伴随守护进程通信的关联命令行界面。类似于 mpdfav,但用 Rust(我更喜欢 Rust)编写,它将在你的标签数据库中维护这些信息。类似于 mpdcron,它还将允许你通过调用外部(用户提供的和配置的)命令来保持这些信息在你的标签中最新。

此README主要关注获取和安装 mpdpopm;用户手册以 Texinfo 格式随软件包分发。用户手册的HTML版本托管在我的个人网站上:unwoundstack.com/doc/mpdpopm/curr

你可以用它做什么?

一旦安装并启动了 mpdpopm,其守护进程(mppopmd)将在后台记录你播放的歌曲,并更新你的 MPD 标签数据库中的播放次数和最后播放时间戳。如果你想给一首歌评分,你可以使用你喜欢的 MPD 客户端或与此软件包一起提供的 mppopm 命令行界面向 mppopmd 发送消息;mppopmd 也会记录评分。

如果你想利用这些信息进行歌曲选择,你可以要求 mppopmd 根据这些信息排队播放歌曲,例如:

mppopm findadd "(rating > 128)"

将所有评分大于128的歌曲添加到播放队列,或者

mppopm findadd "(lastplayed <= \"2022-12-28\")"

将过去一年内未播放的所有歌曲添加。

许可证

mpdpopm是GPL v3软件。

先决条件

Music Player Daemon (MPD): "音乐播放守护进程(MPD)是一个灵活、强大的服务器端应用程序,用于播放音乐。通过插件和库,它可以播放各种声音文件,并通过其网络协议进行控制。" 如果您正在阅读此文档,我假设您已经运行了MPD,因此此文档不会在安装和配置方面说太多,除了您确实需要通过在您的配置中设置sticker_file来设置贴纸数据库。

如果您选择使用预构建的二进制文件或Debian或Arch软件包(可在发行版下找到),那么您需要的就是这些 - 您可以跳转到下文标题为安装的部分。

如果您希望从crates.io下载mpdpopm,您需要Rust工具链(“Rust是一种内存-和线程安全的语言,没有运行时或垃圾收集器”)。

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

mpdpopm还可以作为Autotools源分发(也可在发行版下找到),当然您也可以直接克隆存储库并从源代码构建项目。

安装

如上所述,您可以通过几种不同的方式安装mpdpopm

使用预构建的二进制文件

感谢m040601的建议,您可以下载每个发布版的预构建二进制文件。

cd /tmp
curl -L --output mpdpopm-0.3.3.tar.gz https://github.com/sp1ff/mpdpopm/releases/download/0.3.3/mpdpopm-0.3.3-x86_64-unknown-linux.tar.gz
tar xf mpdpopm-0.3.3.tar.gz
tree mpdpopm-0.3.3-x86_64-unknown-linux/
mpdpopm-0.3.3-x86_64-unknown-linux/
├── bin
│   ├── mppopm
│   └── mppopmd
└── doc
    ├── AUTHORS
    ├── ChangeLog
    ├── COPYING
    ├── NEWS
    ├── README.org
    ├── THANKS
    ├── mppopmd.conf
    ├── mppopmd.info
    └── mppopmd.service

2 directories, 10 files

将二进制文件mppopmd(守护进程)和mppopm(命令行界面)复制到方便的位置(例如/usr/local/bin$HOME/.local/bin),然后继续阅读下文的入门部分。

Crates.io

如果您已安装Rust工具链,只需输入cargo install mpdpopm即可。

使用Debian软件包

如果您正在运行基于Debian的Linux发行版,并且您使用的是x8664处理器,我已经开始提供Debian二进制包,这是由非常酷的cargo-deb Cargo辅助命令提供的。只需这样做:

cd /tmp
curl -L -O https://github.com/sp1ff/mpdpopm/releases/download/0.3.3/mpdpopm_0.3.3_amd64.deb
sudo dpkg -i mpdpopm_0.3.3_amd64.deb

二进制文件将放置在/usr/local/bin,然后您可以继续阅读下方的入门指南

使用Arch软件包

如果您正在运行基于Arch的Linux发行版,我正在提交软件包到AUR

Autotools源分发

如果您已安装Rust工具链和Autotools,您可以通过Autotools从源代码构建。

cd /tmp
curl -L -O https://github.com/sp1ff/mpdpopm/releases/download/0.3.3/mpdpopm-0.3.3.tar.xz
tar xf mpdpopm-0.3.3.tar.xz
cd mpdpopm-0.3.3
./configure
make
make check
sudo make install

所有常规的configure选项都适用(例如--prefix)。特别是,您可以使用--enable-debug来生成调试版本。

从源代码构建

最后,如果您已安装构建工具链(Rust和Autotools),您可以从源代码构建。

git clone [email protected]:sp1ff/mpdpopm.git
cd mpdpopm
./bootstrap
./configure
make
make check
sudo make install

请注意调用./bootstrap,在本例中。

入门

本README提供了启动mpdpopm的“快速入门”指南。对于详细用户文档,请参阅手册

程序结构

mpdpopm提供两个程序:

  1. mppopmd是伴随的守护进程
  2. mppopm是守护进程的关联命令行界面

mppopmd将监视mpd的播放歌曲并记录歌曲完成的时间;这是它知道如何增加播放次数以及更新每个歌曲的最后播放时间戳的原因。 mppopmd使用mpd stickers记录此信息(即播放次数、最后播放和评分)。一个sticker是一点文本信息,客户端可以将其作为名值对附加到歌曲上。mpdpopm为这些项目中的每一个定义了一个新的sticker名称,并在需要时更新每个歌曲的值。

当然,其他mpd客户端通常不会知道mppopmd或它设置的stickers:您,作为用户,必须填补这个差距。当然,您可以启动netcat并开始通过sendmessage发送MPD协议命令,但这并不是特别方便 - 这就是mppopm的用武之地。mppopm是客户端界面;通过它,可以指示mppopmd设置评分、获取和设置mpdpopm所知的各种stickers,甚至根据mpdpopm属性搜索歌曲并将其添加到播放队列。

设置

MPD

如果您正在阅读这部分,我假设您已经启动并运行了MPD,所以这部分将会很简短。然而,有一个提示是由用户m040601提出的:如上所述,mpdpopm利用MPD的stickers数据库。我感到惊讶地发现,如果您没有配置MPD维护stickers数据库,所有stickers命令都将被禁用。因此,在设置mpdpopm之前,找到您的mpd配置文件,并检查是否有一个sticker_file条目;类似以下内容:

sticker_file "/home/sp1ff/lib/mpd/sticker.sql"

请确保您有对指定文件及其父目录的写入权限。

mppopmd

守护进程依赖于一个你需要提供的配置文件。大多数 mppopmd 配置项都有合理的默认值,但也有一些需要根据你的MPD设置进行定制。所有发行版都提供了示例配置文件;有关详细文档,请参阅用户手册

最初你可能希望在前台运行程序以方便故障排除,但之后你可能会想要以守护进程的方式运行它。有关详细说明,请参阅手册

一旦守护进程运行到你满意的程度,如果你使用的是基于systemd的Linux发行版,可以查看由tanshoku提供的示例systemd单元文件。

tanshoku慷慨地为此目的贡献了一个systemd单元。目前,构建过程不会安装它,但将其作为示例提供,并留给用户决定是否需要安装(并在编辑以适应他们的配置后安装)。对于使用Autotools的发行版,可以在${prefix}/share/mpdpopm/examples中找到它,对于Debian软件包,在/usr/local/share/mpdpopm/examples中找到它,对于预构建的二进制文件,在doc文件夹中找到它。

mppopm

到目前为止,mpdpopm将愉快地监控你的播放历史并为你保存播放次数和上次播放的时间戳。但是,如果你想对曲目进行评分,你需要以某种方式诱导你最喜欢的mpd客户端向mpdpopm命令通道(默认为“unwoundstack.com:commands”)发送“rating”消息。由于这不太方便,我为此编写了一个mpd客户端:一个名为mppopm的小型命令行界面。你可以简单地执行以下操作:

mppopm set-rating '*****'

将当前曲目的评分设置为五颗“星星”(使用mppopm --help查看评分系统的说明;简要来说,它是Winamp的)。请注意,默认情况下,设置评分的命令不会产生输出;如果你想确认发生了什么,请使用-标志。

命令行界面提供了用于播放次数、上次播放时间戳和评分的“获取”和“设置”命令。它还提供了命令,可以根据播放次数、评分和上次播放时间搜索你的歌曲,以及通常的艺术家、标题等。使用mppopm --help获取完整的选项列表,包括如何告诉它你的网络上mpd服务器所在的位置。

状态 & 路线图

我目前正在使用mpdpopm管理我的音乐收藏,但它还处于初级阶段;我选择了版本号(0.n),以表明这一点。现在,mpdpopm只是一个应用程序的骨干:它是管道,而不是水槽。

在此之前,你可以使用mppopm命令行界面,例如,为当前曲目评分,但为了在将来真正利用这个评分,你必须为自己编写某种mpd客户端。在0.2版中,我增加了对扩展MPD过滤语法的支持,允许包含由mpdpopm管理的标签的查询,因此你现在可以说:

mppopm findadd "(artist =~ \"foo\") and (rating > 175)"

MPD将处理“artist =~”语句,并处理mpdpopm的“rating >”语句,以及合并结果。

这有望成为将mpdpopm从一个开发者工具转变为面向用户应用的开端。

Windows支持可能还需要一段时间;守护进程依赖于Unix信号处理、MPD Unix套接字和Unix守护进程逻辑,尤其是forkexec……如果您想在Windows上运行它,请告诉我——如果足够多的用户感兴趣,我可以设置一些Windows虚拟机,我将考虑移植。

从长远来看,我认为mpdpopm将是mpd的“双胞胎”——mpd承诺永远不会更改您的文件。至少在标签方面,mpdpopm将承担这项任务。为了解决“关注管道而不是下水道”的问题,我希望编写一个客户端,它可以处理播放器控制(当然),还可以处理可视化与标签编辑——一个完整的音乐库解决方案。

欢迎提出建议、错误报告和PR。

依赖项

~12-23MB
~323K SLoC