현재 재생 중인 노래를 특정 재생 목록에 추가하도록 mpd에 지시할 수 있나요?

현재 재생 중인 노래를 특정 재생 목록에 추가하도록 mpd에 지시할 수 있나요?

이전에 Spotify로 이 작업을 수행한 적이 있습니다. 나는 '체육관'이나 '공부'처럼 특정한 주제나 분위기가 있는 재생목록을 좋아합니다. 그래서 임의의 음악을 듣다가 그러한 재생 목록에 적합하다고 생각되는 노래를 찾을 때 Spotify에 해당 노래를 특정 재생 목록으로 보내달라고 요청할 수 있습니다.

내가 아는 한 mpd에서는 "현재" 재생 목록(일부 다른 플레이어에서는 이를 "대기열"이라고 함)만 편집할 수 있으며 저장할 때 기존 재생 목록을 덮어쓸 수도 있습니다. 따라서 현재 노래를 "자르고" 필요한 재생 목록을 "추가"한 다음 재생 목록을 "저장"할 수 있습니다. 그런데 예전에 듣던 재생목록이 사라져서 계속 듣고 싶어요.

mpd를 사용하여 Spotify와 같은 작업 흐름을 어떻게든 에뮬레이트할 수 있습니까?

답변1

ncmpcpp에서 "a"를 누르면 현재 재생 중인(또는 선택한) 항목을 추가할 재생 목록을 선택할 수 있는 화면이 나타납니다.

답변2

그러면 현재 재생 중인 노래가 코드에 정의된 재생 목록에 추가됩니다. libmpdclient가 필요합니다.

  1. 정의에 따라 다음 코드를 편집하고 파일에 저장합니다(예: add-to-mpd-playlist.c).
  2. lmpdclient 플래그가 있는 gcc 또는 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;
}

또한 몇 가지 검사와 일부 디버깅을 수행하여 코드에 대해 원하는 작업을 수행했습니다.

관련 정보