Du libre, du code, des idées, du mélange d’ArraKISS…

De l’épice pour la pensée

Je voulais afficher une notification lorsque la chanson jouée par MPD change, sans qu'elle ne soit trop envahissante. C'est donc parti pour un petit vilain hack

Voici le résultat :

Le script utilisé est lancé au début de ma session. Le voici :

Et voici le script :



#!/usr/bin/env python3.4
# -*- coding:Utf-8 -*- 


"""
Auteur :      thuban <thuban@yeuxdelibad.net>  
licence :     MIT
"""

import sys
import time
import os
from mpd import MPDClient

ypos = 760 #change me
def notify(t1, t2):
    #os.system('notify-send "{}"'.format(t1 + "\n" + t2))
    os.system('echo "♪ {} - {} ♪" | dzen2 -p 5 -y {}'.format(t1, t2, ypos))


def main():
    client = MPDClient()
    client.connect('localhost', 6600)

    oldsong = ''
    while True :
        try:
            try:
                newsong = client.currentsong()['title']
                artist = client.currentsong()['artist']
                if newsong != oldsong:
                    oldsong = newsong
                    notify(newsong, artist)
            except KeyError:
                pass

        except KeyboardInterrupt:
            print('Bye Bye!')
            client.close()
            client.disconnect()
            sys.exit(0)

        time.sleep(.2)

    return 0

if __name__ == '__main__':
	main()


# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4

Pour changer la position de la barre, modifiez le valeur de ypos = 760 .
Vous aurez besoin de dzen pour le notifications, sinon décommentez la ligne avec notify-send. python-mpd est nécessaire aussi.

Pour le reste, je vous laisse hacker à votre bon plaisir :)

Il est souvent question du "meilleur lecteur de musique". On voit alors passer des amarok, clementine ou quodlibet. Alors ok, ces derniers ne sont pas mauvais, il faut l'admettre. Mais ils font tout un tas de choses inutiles pour la plupart d'entre nous.

Là, on va parler de MPD alias Music Player Daemon, qui est selon moi le meilleur lecteur de musique. Pourquoi?

  • Il nécessite peu de ressources.
  • Il supporte des milliers de morceaux sans aucun ralentissement ni bugs. Seul quodlibet lui fait concurrence sur ce point. Actuellement, ma liste de lecture contient 14102 morceaux.
  • Il dispose de nombreuses interfaces et s'adapte ainsi à tous les goûts.
  • Il est très facile d'écrire des petits outils pour le contrôler.
  • On peut même diffuser sa musique.

Sa particularité est d'avoir le lecteur sous forme de "serveur" qui tourne en arrière plan et qui lit votre musique, alors qu'il peut être contrôlé par les interfaces de votre choix. C'est en fait un véritable avantage. Eh oui, vous pouvez vouloir utiliser un client très complet comme gmpc :


Un client léger mais agréable comme sonata :


Ou alors un truc de geek comme ncmpcpp :



On va voir dans les prochaines parties comment installer mpd sur debian, puis quelques astuces de geekounets ☺ .

L'installation de MPD :
Sur debian, il n'y a pas de surprises, il faut installer le paquet mpd. Je vous conseille vivement d'installer aussi un client comme mpc (qui servira dans les scripts) et un client graphique tel que l'excellent sonata :

sudo apt-get install mpd mpc sonata

Pour configurer mpd, vous avez 2 possibilités :

  1. Éditer le fichier /etc/mpd.conf : la configuration sera la même pour tous les utilisateurs du système.
  2. Éditer un fichier /home/votre-login/.mpdconf . Dans ce cas, il faudra lancer la commande mpd manuellement pour le lancer. De plus, il faudra désactiver le lancement automatique de mpd au démarrage avec les commandes suivantes :
systemctl disable mpd.service
systemctl disable mpd.socket

La syntaxe du fichier de configuration est cependant la même. Il n'y a rien de farfelu dedans, je vais donc vous proposer ci-dessous un fichier de configuration avec des commentaires pour vous aider à l'adapter à votre cas.

# Répertoire contenant les musiques
music_directory		"~/Musique"
# Mise à jour automatique de la liste des musiques
auto_update     "yes"

# fichiers permettant de retenir des informations sur la liste de lecture de mpd
# Pensez à créer le dossier ~/.mpd
db_file			"~/.mpd/tag_cache"
pid_file			"~/.mpd/pid"
state_file			"~/.mpd/state"
# Répertoire des listes de lecture. Pensez à le créer
playlist_directory		"~/.mpd/playlists"

# Le nom d'utilisateur qui lance mpd (pour ne pas être lancé en tant que root)
user				"petitjibus"

# On ne veut pas diffuser ici.
bind_to_address		"localhost"

# La liste de lecture contient le chemin complet des fichiers
save_absolute_paths_in_playlists	"yes"

audio_output {
	type		"alsa"
	name		"My ALSA Device"
	mixer_device	"default"	# optional
}

# Le son reste le même au changement de chanson
volume_normalization		"yes"

# Respect de l'UTF-8 dans les noms de fichier
filesystem_charset		"UTF-8"
id3v1_encoding			"UTF-8"


Une fois votre configuration terminée, relancez le service mpd (avec "service mpd restart" ) ou bien lancez la commande mpd selon que vous ayez choisi le cas 1 ou 2.

Astuces diverses :

  • mpdscribble (voir le paquet du même nom) permet d'envoyer sur last.fm et sur libre.fm vos lectures et sert donc de "scrobbler" (Si certains connaissent la traduction de ce mot...). Vous devrez le configurer dans /etc/mpdscribble.conf et modifier /etc/default/mpdscribble pour avoir
    MPD_SYSTEMWIDE=1
  • Vous trouverez ici un script qui permet de lire n'importe quelle fichier audio dans mpd même s'il n'est pas dans la base de données. Il faut juste mpc d'installé. C'est particulièrement pratique en actions personnalisée dans thunar par exemple.

Pour l'utiliser, lancer

play_in_mpd /chemin/vers/la/musique.mp3

Pour seulement ajouter le fichier dans la liste de lecture, ajoutez l'option -n :

play_in_mpd -n /chemin/vers/la/musique.mp3

  • Pour mélanger la liste de lecture :
    mpc shuffle
  • Pour mettre à jour votre liste de lecture après avoir ajouté de nouveaux morceaux à votre bibliothèque :
    mpc --wait update && mpc clear && mpc ls |mpc add
  • Ajouter une radio à la liste de lecture :
    mpc add "http://audio.scdn.arkena.com/11008/franceinter-midfi128.mp3"
    .

  • Chercher une chanson et la jouer rapidement avec dmenu avec le script dmpc
  • Afficher la chanson jouée par mpd :
    mpc status |head -n1
  • Avancement de la lecture :
    mpc |grep -Eo '[0-9]+:[0-9]+/[0-9]+:[0-9]+' 
  • Et vos astuces?


Voir aussi :

J'ai enfin mis en place à moindre frais une sorte de jukebox fait maison. L'idée est d'avoir de la musique de qualité qu'on peut entendre partout dans l'appartement, et de pouvoir contrôler la lecture de n'importe où aussi.

Alors pour le matériel, j'ai juste une chaîne HiFi (qui finalement date un peu beaucoup). Donc au niveau du son dans toutes les pièces, on peut faire nettement mieux avec du matériel plus récent. Cette chaîne reçoit le flux audio par un jack relié à un raspberry Pi. Notez que ça pourrait être n'importe quel pc, mais au moins, le raspberry consomme très peu.

La musique est située sur mon serveur, qui est présente de façon transparente sur le raspberry pi grâce à sshfs. On pourrait très bien faire de même avec un partage ntf, ou encore simplement monter un disque dur sur le raspberry pi. Bon, pour ce qui est de la lecture, tout roule.

Voyons maintenant comment contrôler le tout (changer de chanson, augmenter/baisser le volume...) :




Ce raspberry se [connecte automatiquement au lancementforums.debian.net/viewtopic.php?t=119348 et lance 2 commandes ajoutées au fichier ~/.profile :


Ce dernier est un client avec une interface web. Il ne nécessite pas php, et est codé en C, c'est dont tout à fait adapté au raspberry. Bon par contre, je n'ai relié aucun écran au raspberry pi, donc pour accéder à l'interface de ympd, il me suffit d'un navigateur web pour aller à l'adresse 192.168.1.69:8080 . C'est très facile avec un smartphone par exemple, qui fait office de télécommande.

Pour retrouver cette adresse, vous pouvez lancer cette commande sur le raspberry pi :

/sbin/ifconfig |grep inet

Et si l'interface de ympd ne vous plaît pas, rien n'empêche de contrôler la lecture avec ssh. On crée des clés pour ne pas avoir à entrer de mot de passe, puis on gère mpd avec nos scripts habituel. Par exemple, pour passer à la chanson suivante :

ssh alias_pour_la_musique mpc next

Plus simplement, n'importe quel client à mpd peut aussi se connecter à l'hôte 192.168.1.69 si vous le configurer correctement :

mpc -h 192.168.1.69 next

Attention, mpd doit avoir dans ce cas dans son fichier de configuration

bind_to_adress "192.168.1.69"

et ympd doit être lancé ainsi :

ympd -h 192.168.1.69