Mpd

我可以告訴 mpd 將目前播放的歌曲添加到特定的播放列表嗎?

  • November 26, 2017

我曾經用 spotify 做到這一點。我喜歡有特定主題或情緒的播放列表,例如“健身房”或“學習”。因此,當聽隨機音樂並找到我認為適合其中一個播放列表的歌曲時,我可以要求 spotify 將歌曲發送到特定的播放列表。

據我所知,mpd 只允許我編輯“目前”播放列表,其他一些玩家稱之為“隊列”,並在保存時可能會覆蓋現有的播放列表。所以我可以“裁剪”目前歌曲,“添加”必要的播放列表,然後“保存”播放列表。但是這樣我就失去了以前聽過的任何播放列表;我想繼續聽。

我可以以某種方式用 mpd 模擬我的 spotify-ish 工作流程嗎?

只需在 ncmpcpp 中按“a”即可打開一個螢幕,您可以在其中選擇播放列表以添加目前播放(或選定)的項目。

這會將目前播放的歌曲添加到程式碼中定義的播放列表中。它需要 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;
}

我還進行了一些檢查和一些調試;隨心所欲地處理程式碼。

引用自:https://unix.stackexchange.com/questions/202046