我可以告诉 mpd 将当前播放的歌曲添加到特定的播放列表吗?

我可以告诉 mpd 将当前播放的歌曲添加到特定的播放列表吗?

我以前用 Spotify 做过这个。我喜欢有特定主题或情绪的播放列表,例如“健身房”或“学习”。因此,当听随机音乐并找到一首我认为适合此类播放列表的歌曲时,我可以要求 Spotify 将歌曲发送到特定的播放列表。

据我所知,mpd 只允许我编辑“当前”播放列表(其他一些玩家称之为“队列”),并且在保存时可能会覆盖现有的播放列表。所以我可以“裁剪”当前歌曲,“添加”必要的播放列表,然后“保存”播放列表。但这样我就失去了之前听过的播放列表;我想继续听。

我可以用 mpd 以某种方式模拟我的 Spotify 式工作流程吗?

答案1

只需在 ncmpcpp 中按“a”就会弹出一个屏幕,您可以在其中选择一个播放列表以将当前播放(或选定)的项目添加到其中。

答案2

这会将当前播放的歌曲添加到代码中定义的播放列表中。它需要 libmpdclient。

  1. 使用您的定义编辑以下代码并保存到文件(例如 add-to-mpd-playlist.c)
  2. gcc 或带有 lmpdclient 标志的 clang (例如 clang add-to-mpd-playlist.c -o add-to-mpd-playlist -lmpdclient)
  3. 运行二进制文件(例如./add-to-mpd-playlist)

进一步的改进包括允许主机、端口、通行证、播放列表的参数和/或配置文件。libmpdclient 文档是你的朋友。

#include <stdio.h>
#include <mpd/client.h>

//D(x) function for debug messages
//#define DEBUG
#ifdef DEBUG
#define D(x) do { x; } while(0)
#else
#define D(x) do { } while(0)
#endif

#define HOST "YOUR_HOSTNAME"
#define PORT YOUR_PORTNUMBER //usually it's 6600
#define PASS "YOUR_PASSWORD" //comment out if no password
#define PLAYLIST "PLAYLIST_NAME_TO_ADD_CURRENT_SONG_TO"

struct mpd_connection* conn(){
    D(printf("%s %s\n","Connecting to",HOST));
    const char* host = HOST;
    unsigned port = PORT;
    struct mpd_connection* c = mpd_connection_new(host,port,0);

    enum mpd_error err = mpd_connection_get_error(c);
    if(err != 0){
        printf("Error code: %u. View error codes here: https://www.musicpd.org/doc/libmpdclient/error_8h.html\n",err);
        return 0;
    }

    #ifdef PASS
    const char* pass = PASS;
    if(mpd_run_password(c,pass) == false){
        printf("%s\n","Bad password");
        return 0;
    }
    #endif

    D(printf("%s %s\n","Connected to",HOST));
    return c;
}


int main(){
    struct mpd_connection* c = conn();
    if(c == 0) return -1;

    struct mpd_song* curr = mpd_run_current_song(c);
    const char* curr_uri = mpd_song_get_uri(curr);
    D(printf("Currently playing: %s\n",curr_uri));

    if(mpd_run_playlist_add(c,PLAYLIST,curr_uri)){
        printf("%s %s %s %s\n","Added",curr_uri,"to playlist",PLAYLIST);
    }
    else{
        printf("%s\n","Some error");
        return -1;
    }

    return 0;
}

我还进行了一些检查和一些调试;按照您的意愿处理代码。

相关内容