#song #playlist #similarity

app blissify

MPD插件,用于创建智能播放列表

31个版本

0.5.0 2024年8月12日
0.4.1 2024年7月8日
0.4.0 2024年6月18日
0.3.10 2024年2月9日
0.2.2 2021年7月21日

#178音频

Download history 71/week @ 2024-05-27 106/week @ 2024-06-03 8/week @ 2024-06-10 253/week @ 2024-06-17 8/week @ 2024-06-24 38/week @ 2024-07-01 131/week @ 2024-07-08 4/week @ 2024-07-15 1/week @ 2024-07-22 132/week @ 2024-08-12

每月 133 次下载

GPL-3.0-only

445KB
1.5K SLoC

crate build

Blissify - 分析MPD库并创建智能播放列表

Blissify是一个程序,用于从您的MPD曲目库创建听起来相似的播放列表,类似于Spotify电台。

在底层,它是一个MPD插件,用于bliss

Blissify首先需要分析您的音乐库,即计算并存储一系列从您的歌曲中提取的特征,包括节奏、音色、响度等。

之后,它就可以创建播放列表了:播放一首歌作为起点,运行blissify playlist 30,就这样!您就得到了一个包含30首听起来像第一首歌曲的播放列表。

注意:您需要安装MPD才能使用blissify。否则,您可能希望为使用的音频播放器实现bliss-rs支持。

安装/使用

安装它,您需要clang、pkg-config和ffmpeg库(包括开发头文件),以及一个可工作的Rust安装

基于Debian的系统

apt install -y clang libavcodec-dev libavformat-dev libavutil-dev libavfilter-dev libavdevice-dev libsqlite3-dev pkg-config

在Archlinux上

pacman -S base-devel clang ffmpeg

最后,使用cargo install blissify来安装它。

注意:如果您正在使用树莓派及其相应的ffmpeg(即ffmpeg -version|grep rpi返回某些内容),请使用cargo install --features=rpi blissify代替。

以下所有命令都读取 MPD_HOSTMPD_PORT 环境变量,并尝试通过该变量连接到 MPD。如果您想连接到除了默认的 127.0.0.1:6600(默认端口)以外的其他地址,请修改它。它应该与MPD 文档完全兼容。

分析库

要初始化和分析您的 MPD 库,请使用

$ blissify init /path/to/mpd/root

请注意,这可能需要几分钟(对于包含超过 20k 首歌曲的大型库,可能需要几小时)才能完成。

您可以通过运行以下命令进一步更新您的库

$ blissify update

如果发生错误并且数据库进入不稳定状态,您可以使用以下命令

$ blissify rescan

删除现有数据库并重新扫描所有文件。

如果您想查看分析是否成功,或者只是想查看数据库中的当前文件,可以使用以下命令

$ blissify list-db

创建播放列表

简单版本

$ blissify playlist 100

这将添加 100 首与当前正在播放的歌曲相似的曲目,从最相似的开始。这也会删除队列中的其他所有歌曲,只留下智能播放列表。

如果您希望在当前播放的歌曲后添加歌曲但保持当前队列,可以使用 --keep-current-queue 标志,如下所示

$ blissify playlist 100 --keep-current-queue

更改距离度量

要使用不同于默认的(欧几里得距离)的距离度量来创建播放列表,运行

$ blissify playlist --distance <distance_name> 30

distance_name 目前可以是 euclideancosine。如果您生成的播放列表不满意,请不要犹豫去实验这个参数!

创建“种子”播放列表

您可以从与第一首歌曲最相似的歌曲开始创建播放列表,而不是从最相似到最不相似(默认),创建一个播放列表,将第一首歌曲最接近的歌曲放入队列,然后是第二首歌曲最接近的歌曲,等等,从而在歌曲之间创建“路径”。

要尝试一下(构建播放列表可能需要更多时间)

$ blissify playlist --seed-song 30

创建专辑播放列表

您还可以创建一个播放列表,其中包含与您正在收听的当前专辑相似的音乐专辑(更具体地说,是您正在播放的歌曲的专辑,无论您是否已将整个专辑加入队列)。

要尝试一下

$ blissify playlist --album-playlist 30

如果您希望在当前播放的专辑后添加专辑但保持当前队列,可以使用 --keep-current-queue 标志,如下所示

$ blissify playlist --album-playlist 100 --keep-current-queue

创建交互式播放列表

交互式播放列表从一首歌曲开始,并允许您从显示的 3 首最接近的歌曲中选择下一首歌曲播放(可以手动设置显示的歌曲数量)

$ blissify interactive-playlist --number-choices 5

默认情况下,它会截断当前播放列表,只保留当前播放的歌曲。如果您只想从最后一首歌曲开始并继续播放,请使用 --continue

$ blissify interactive-playlist --number-choices 5 --continue

模拟运行模式

如果您想查看 blissify 会创建哪些播放列表而不更改队列,或者您希望将 blissify 的输出连接到其他地方,请使用 --dry-run 选项,如下所示

$ blissify playlist 100 --dry-run

详细信息

如果您对底层发生的事情感兴趣,或者想要为其他音频播放器创建类似的插件,请参阅bliss 的文档

故障排除

如果您正在为非 Linux 操作系统编译 blissify-rs,您可能会遇到一个错误,提示您使用 bindgen 功能。

error: failed to run custom build command for `bliss-audio-aubio-sys v0.2.2`

Caused by:
  process didn't exit successfully: `path/release/build/bliss-audio-aubio-sys-fb4d0ec74b3698ed/build-script-build` (exit status: 101)
  --- stderr
  thread 'main' panicked at .cargo/registry/src/index.crates.io-6f17d22bba15001f/bliss-audio-aubio-sys-0.2.2/build.rs:34:13:
  No prebuilt bindings. Try use `bindgen` feature.
  note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
warning: build failed, waiting for other jobs to finish...
error: failed to compile `blissify v0.4.1`, intermediate artifacts can be found at `/var/folders/pb/g43q604n6v71kwp_89ccy6840000gn/T/cargo-installoyKiUv`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.

要修复此错误并成功构建 blissify-rs,请使用以下命令:cargo install blissify --features=default,bliss-audio/update-aubio-bindings

依赖关系

~50MB
~875K SLoC