Posso dizer ao mpd para adicionar a música atualmente sendo reproduzida a uma playlist específica?

1

Eu costumava fazer isso com spotify. Eu gosto de ter listas de reprodução específicas de tópicos ou climas, como "academia" ou "estudo". Então, ao ouvir músicas aleatórias e encontrar uma música que eu acho que se encaixaria em uma dessas playlists, eu poderia pedir para enviar a música para uma playlist específica.

Tanto quanto eu posso dizer, o mpd só me permite editar a lista de reprodução "atual", que alguns outros chamam de "fila", e potencialmente sobrescrever uma lista existente ao salvá-la. Então eu poderia "cortar" a música atual, "adicionar" a lista de reprodução necessária e "salvar" a lista de reprodução. Mas desta forma eu perdi qualquer playlist que eu estava ouvindo antes; e gostaria de continuar a ouvi-lo.

Posso emular meu fluxo de trabalho spotify-ish com o mpd de alguma forma?

    
por mkaito 07.05.2015 / 17:44

2 respostas

2

Basta pressionar "a" em ncmpcpp para exibir uma tela onde você pode selecionar uma lista de reprodução para adicionar o item atualmente em reprodução (ou selecionado).

    
por 08.05.2015 / 09:42
0

Isso adicionará a música atualmente sendo reproduzida a uma lista de reprodução definida no código. Requer o libmpdclient.

  1. edite o código abaixo com o seu define e salve no arquivo (por exemplo, add-to-mpd-playlist.c)
  2. gcc ou clang com sinalizador lmpdclient (por exemplo, clang add-to-mpd-playlist.c -o add-to-mpd-playlist -lmpdclient)
  3. executar binário (por exemplo, ./add-to-mpd-playlist)

Outras melhorias incluem a permissão de argumentos e / ou um arquivo de configuração para host, porta, passagem, playlist. doc do libmpdclient é seu amigo.

#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;
}

Eu coloquei algumas verificações e um pouco de depuração também; faça com o código que você quiser.

    
por 26.11.2017 / 11:03

Tags