My Own Memory Hole
Blog♯mpd

Générer des playlists pour MPD avec les dernières pistes ajoutées

Afin de retrouver facilement dans ncmpcpp les dernières pistes ajoutées à ma bibliothèque, j'ai trouvé et adapté le script suivant.

$ nano ~/bin/lastaddedmpd
#!/bin/bash

cd /home/$USER/NAS/Musique
find . -type f -ctime -1 | egrep '\.mp3$|\.flac$' | awk '{ sub(/^\.\//, ""); print }' | sort -n > /home/$USER/NAS/Musique/playlists/$(date +%d-%m-%Y)_last_$1_days.m3u
$ chmod +x ~/bin/lastaddedmpd

Et on lance la commande lastaddedmpd avec pour argument le nombre de jours à prendre en compte.

MPD et Bluetooth sur Raspberry Pi 2

Afin d'utiliser pleinement mon « système multimédia » à base d'un NAS et d'un Raspberry Pi – qui commence à se faire vieillissant puisque dans sa vesion 2 –sur lequel tourne un serveur MPD, je souhaitais connecter via Bluetooth ce dernier à mon petit amplificateur Tangent Ampster BT.

Connexion Bluetooth

J'ai fait l'aquisition d'un dongle USB/Bluetooth TP-Link reconnu, dans mon souvenir, nativement sous Raspbian Buster, sous réserve d'avoir bien installé le paquet pi-bluetooth :

sudo apt install pi-bluetooth

Pour connecter l'ampli au Raspberry Pi, on utilise l'utilitaire en ligne de commande bluetoothctl : on commence par rechercher les périphériques disponibles (scan on), puis on fait l'appairage avec le bon device (pair) et on lui accorde notre confiance (pas d'authentification nécessaire, trust) avant de nous y connecter (connect) et de cesser la recherche (scan off) :

$ bluetoothctl 
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:15 Discovering: yes
[CHG] Device FC:58:FA:14:27:BC RSSI: -71
[CHG] Device FC:58:FA:14:27:BC TxPower: 4
[...]
[bluetooth]# pair FC:58:FA:14:27:BC 
Attempting to pair with FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
[...]
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[CHG] Device FC:58:FA:14:27:BC Paired: yes
Pairing successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: no
[CHG] Device FC:58:FA:14:27:BC Connected: no
[bluetooth]# trust FC:58:FA:14:27:BC 
[CHG] Device FC:58:FA:14:27:BC Trusted: yes
Changing FC:58:FA:14:27:BC trust succeeded
[bluetooth]# connect FC:58:FA:14:27:BC 
Attempting to connect to FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
Connection successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[Tangent Ampster BT]# scan off
Discovery stopped
[...]
[Tangent Ampster BT]# exit

Cependant, si à l'étape de la connexion à l'ampli, vous obtenez une erreur, il convient alors d'installer le paquet pulseaudio-module-bluetooth  :

$ sudo apt install pulseaudio-module-bluetooth

Ouvez ensuite le fichier /etc/pulse/default.pa et vérifiez aux alentours des lignes 65-67 que vous avez bien :

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

et ajoutez à la fin du fichier :

# automatically switch to newly-connected devices
load-module module-switch-on-connect

Lancez alors pulseaudio avec la commande pulseaudio -D après l'avoir tué si besoin (pulseaudio -k) puis relancez la commande connect dans l'outil bluetoothctl.

Configurer de nouvelles sorties dans MPD

Une nouvelle fois, je ne suis pas parvenu à configurer MPD pour qu'il utilise PulseAudio... On s'en tient donc à ALSA et au « Bluetooth Audio ALSA Backend » bluealsa que l'on commence par installer :

$ sudo apt install bluealsa

Puis on « crée » de nouveaux périphériques audio pour l'ensemble du système et de ses utilisateurs :

sudo nano /etc/asound.conf
pcm.tangent {
    type plug
    slave {
        pcm {
            type bluealsa
            device FC:58:FA:14:27:BC
            profile "a2dp"
        }
  }
  hint {
    show on
    description "Tangent Ampster BT"
    }
}

pcm.jblgo {
  type plug
  slave {
    pcm {
      type bluealsa
      device 78:44:05:61:4C:17
      profile "a2dp"
    }
  }
  hint {
    show on
    description "JBL Go"
  }
}

On en vient ensuite à la configuration de MPD auquel on doit déclarer les nouvelles sorties à utiliser :

audio_output {
        type            "alsa"
        name            "Tangent Ampster BT - ALSA Bluetooth"
        device          "tangent"
        mixer_type  "software"
    format          "44100:16:2"
}
audio_output {
        type            "alsa"
        name            "JBL Go - ALSA Bluetooth"
        device          "jblgo"
        mixer_type      "software"
}

Et on relance le service :

$ sudo service mpd restart

mpdscribble : scrobbler vers last.fm et Libre.fm

mpdscribble, une fois installé et configuré (cf. cet article), ne scrobble que vers le service last.fm.

Si vous souhaitez scrobbler la musique que vous écoutez avec MPD également vers l'alternative libre à last.fm, Libre.fm, il faut alors modifier à la main le fichier de configuration de mpdscribble qui devrait ressembler à cela :

$ sudo cat /etc/mpdscribble.conf
## mpdscribble - an audioscrobbler for the Music Player Daemon.
## http://mpd.wikia.com/wiki/Client:mpdscribble

# HTTP proxy URL.
#proxy = http://the.proxy.server:3128

# The location of the pid file.  mpdscribble saves its process id there.
#pidfile = /var/run/mpdscribble.pid

# Change to this system user after daemonization.
#daemon_user = mpdscribble

# The location of the mpdscribble log file.  The special value
# "syslog" makes mpdscribble use the local syslog daemon.  On most
# systems, log messages will appear in /var/log/daemon.log then.
# "-" means log to stderr (the current terminal).
log = syslog

# How verbose mpdscribble's logging should be.  Default is 1.
verbose = 1

# How often should mpdscribble save the journal file? [seconds]
#journal_interval = 600

# The host running MPD, possibly protected by a password
# ([PASSWORD@]HOSTNAME).  Defaults to $MPD_HOST or localhost.
#host = localhost

# The port that the MPD listens on and mpdscribble should try to
# connect to.  Defaults to $MPD_PORT or 6600.
#port = 6600

[last.fm]
url = http://post.audioscrobbler.com/
username = my_username
password = my_password
# The file where mpdscribble should store its Last.fm journal in case
# you do not have a connection to the Last.fm server.
journal = /var/cache/mpdscribble/lastfm.journal

#[libre.fm]
#url = http://turtle.libre.fm/
#username = my_username
#password = my_password
#journal = /var/cache/mpdscribble/librefm.journal

#[jamendo]
#url = http://postaudioscrobbler.jamendo.com/
#username = my_username
#password = my_password
#journal = /var/cache/mpdscribble/jamendo.journal

#[file]
#file = /var/log/mpdscribble/log

ATTENTION : il semblerait que mpdscribble ne parvienne pas à scrobbler vers les deux services si vos comptes ont le même identifiant et le même mot de passe.

Avant d'éditer le fichier /etc/mpdscribble.conf, il faut calculer le hash de votre mot de passe ; pour ce faire, lancer la commande :

$ echo -n 'PASSWORD' | md5sum | cut -f 1 -d " "

Copiez le résultat puis lancez l'édition du fichier de conf de mpdscribble :

$ sudo nano /etc/mpdscribble.conf

et modifiez la section libre.fm : décommentez chacune des lignes de celle-ci et saisissez votre nom d'utilisateur et copiez le hash de votre mot de passe. Cette section devrait ressembler à cela :

[libre.fm]
url = http://turtle.libre.fm/
username = USER
password = 319f4d26e3c536b5dd871bb2c52e3178                 #hash de PASSWORD
journal = /var/cache/mpdscribble/librefm.journal

Une fois enregistré, il vous faut relancer mpdscribble :

$ sudo service mpdscribble restart

mpdscribble : conserver les morceaux scrobblés dans un log

Par défaut, il semblerait que mpdscribble ne conserve pas dans un log les morceaux scrobblés (sauf lorsque l'on n'a pas de connexion au service de scrobbling de LastFM).
Il est évidemment possible de garder la trace localement de tout ce que MPD lit, simplement en modifiant le fichier de configuration /etc/mpdscribble.conf. Cependant, il faut bien garder à l'esprit qu'un tel fichier de log ne fait que grossir, posant d'éventuels problèmes sur le long terme. Ce n'est donc pas forcément une bonne idée...

Mais pour ce faire, il suffit donc de modifier le fichier de configuration /etc/mpdscribble.conf :

$ sudo nano /etc/mpdscribble.conf

et de décommentez les dernières lignes du fichier, pour obtenir ceci :

[file]
file = /var/log/mpdscribble/log

Puis on crée le répertoire /var/log/mpdscribble et on lui donne pour propriétaire l'"utilisateur" mpdscribble :

$ sudo mkdir /var/log/mpdscribble && sudo chown mpdscribble /var/log/mpdscribble

On relance le service mpdscribble :

$ sudo service mpdscribble restart

Pour vérifier que tout fonctionne, on lance la lecture et à la fin de la lecture de la première piste, vous devriez la voir apparaître dans le log que l'on affiche ainsi :

$ tail -f /var/log/mpdscribble/log

mpdscribble : MPD et LastFM

Utilisateur de LastFM et de MPD pour écouter ma musique, je dois pouvoir scrobbler les titres que j'écoute : mpdscribble est la solution, particulièrement simple à installer et configurer.

Il faut donc commencer par installer le paquet mpdscribble :

$ sudo apt install mpdscribble

Une fois cela fait, il faut le configurer :

$ sudo dpkg-reconfigure mpdscribble

Il faut alors accepter de lancer mpdscribble comme daemon, puis saisir ses identifiants LastFM. Une fois cela fait, le service devrait démarrer et les titres écoutés apparaîtront sur LastFM.

ncmpcpp, un client pour mpd

ncmpcpp est un client pour MPD, plus complet que ncmpc, dont il reprend le mécanisme de navigation, l'interface en ncurse, apportant de nouvelles fonctionnalités parmi lesquelles la visualisation, l'édition des tags, la recherche avec des expressions régulières, une véritable navigation au sein de votre collection…

ncmpcpp est (bien évidemment) disponible dans les dépôts :

sudo apt install ncmpcpp

Pour le lancer, la commande suivante suffit :

ncmpcpp

La configuration se fait, comme pour ncmpc, à la main dans le fichier ~/.ncmpcpp/config. On commence par créer le répertoire ~/.ncmpcpp puis on copie le ficher d'exemple avant de l'éditer :

mkdir ~/.ncmpcpp
cp /usr/share/doc/ncmpcpp/config.gz ~/.ncmpcpp/
gzip -d ~/.ncmpcpp/config.gz
nano ~/.ncmpcpp/config

Si vous avez des difficultés pour configurer ncmpcpp, penchez-vous sur la documentation :

man ncmpcpp

ll faut relancer ncmpcpp pour que les modifications du fichier de configuration soient prises en compte. Rien de particulier si ce ne sont ces deux points :

  1. pour pouvoir éditer les tags depuis ncmpcpp, il vous faut impérativement renseigner le champ mpd_music_dir (ligne 14) qui correspond au répertoire de votre musique (celui que vous avez indiqué dans la configuration de MPD) ;
  2. pour profiter de la visualisation, il faut commencer par modifier la configuration de MPD et ajouter dans la section Audio Output ces lignes :
audio_output {
 type "fifo"
 name "My FIFO"
 path "/tmp/mpd.fifo"
 format "44100:16:1"
}

Il faut ensuite éditer certaines options dans le fichier ~/.ncmpcpp/config ; les voici :

visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "My MPD PulseAudio Output"
visualizer_sync_interval = "30"
visualizer_type = "spectrum" (spectrum/wave)

Pensez à relancer mpd :

sudo service mpd restart

Un fichier de configuration est téléchargeable ici.