現在再生中の曲を特定のプレイリストに追加するように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;
}

また、いくつかのチェックといくつかのデバッグを実行して、コードに対して必要な操作を実行しました。

関連情報