Music on Console et son intégration dans WMFS

Bonjour à tous,

Ce ne sont pas les programmes qui manquent lorsqu’il s’agit de lecture audio, sous Gnu/Linux. Souvent, ces derniers intègres une pléthore de fonctionnalités avancées, comme l’affichage des paroles, de la page Wikipédia, etc. Personnellement, même avec une assez conséquente bibliothèque musicale, ces fonctions ne m’ont jamais été utiles. C’est pour cela que j’utilise Moc. C’est un lecteur audio très léger, KISS et en mode console à l’instar de ncmpcpp, un client MPD. Merci tout d’abord à Ypnose, qui me l’a fait découvrir.

Je vais en premier lieu vous présenter brièvement Moc puis je parlerai de son intégration dans WMFS.

(Pour vous rendre directement à l’intégration de Moc dans WMFS, cliquez ici)

Utilisation de Moc :

(Notez que vous n’êtes pas obligé d’utiliser WMFS pour cette partie ;-))

Music on Console est donc un petit lecteur audio basé sur ncurse. Il est assez similaire à Music Player Daemon dans la mesure où il utilise un serveur. Mais contrairement à ce dernier, Moc possède directement une interface.

Pour installer Music on Console :

pacman -S moc # Arch Linux
apt-get install moc # Debian

Ceci fait, copiez le fichier de configuration par défaut dans le dossier ~/.moc/config :

cp /usr/share/doc/moc/config.example ~/.moc/config

Je ne vais pas aborder la configuration. En effet, elle est relativement simple et le fichier est bien commenté. Par ailleurs, vous n’aurez surement pas beaucoup de choses à changer.

Passons maintenant à l’utilisation. Elle est, comme le reste, relativement simple (et plus encore lorsqu’on aura intégré Moc à WMFS !).

Lancez l’interface :

mocp

Vous vous trouvez donc face à l’interface simplissime de Moc :

 

moc

 

Détaillons cette interface. À gauche se trouve l’explorateur de fichier. Vous pouvez vous déplacer y à l’aide des flèches à travers vos répertoires musicaux. Vous pouvez alors directement lire un dossier ou constituer une playlist (notez que vous pouvez aussi charger une playlist déjà existante dans un fichier .m3u). Cette playlist se trouve à droite. Enfin, en bas, vous trouvez les différentes informations à propos du titre en cours de lecture. Voici les différents raccourcies utilisable :

Enter   - Lancer la lecture d'un titre
  p     - Pause
  n     - Titre suivant
  b     - Titre précedent
  S     - Active le mode random
 TAB    - Permet de switcher entre la liste des répertoires et la playlist
  a     - Ajoute un fichier à la playlist
  A     - Ajoute tout un dossier à la playlist
  C     - Permet de vider cette même playlist
  .     - Augmente le volume de 5%
  ,     - Baisse le volume de 5%

Cette liste est bien sûr non exhaustive. Vous pouvez retrouver l’intégralité des commandes en lisant la page man de Moc. Notez aussi que vous pouvez personnaliser l’interface avec des thèmes. Je vous laisse vous documenter là-dessus. Personnellement, je n’utilise pas de thèmes, tout étant géré par mon .Xdefaults (je le mettrai en ligne plus tard, j’ai encore des choses à régler).

Lorsque vous souhaitez quitter Moc, vous devez stopper le serveur :

mocp -x

Par ailleurs, vous pouvez controler moc directement depuis votre terminal. C’est ce qui va d’ailleurs nous permettre d’intégrer Music On Console à WMFS.

Intégration à Window Manager From Scratch :

Pour commencer l’intégration de Moc à WMFS, penchons nous sur le menu. Ouvrez donc votre fichier wmfsrc : nous allons créer un menu spécialement dédié au contrôle de Moc :

[set_menu]
    name = "moccontrol"
    align = "left"

    fg_focus  = "#050505" bg_focus  = "#02A1CB"
    fg_normal = "#9F9AB3" bg_normal = "#050505"

    [item] name = "Music On Console"  func = "spawn"  cmd = "urxvt -e mocp" [/item]
    [item] name = "     -- Controles --"[/item]
    [item] name = "Play/Pause"        func = "spawn"  cmd = "mocp -G"       [/item]
    [item] name = "Titre suivant"     func = "spawn"  cmd = "mocp -f"       [/item]
    [item] name = "Titre précédent"   func = "spawn"  cmd = "mocp -r"       [/item]
    [item] name = "Stop"              func = "spawn"  cmd = "mocp -s"       [/item]
[/set_menu]

À vous d’adapter les couleurs, les images (i[0;1;20;20;chemin/image.png] par exemple) et l’emulateur de terminal utilisé pour afficher l’interface. Mais voyons à quoi correspondent ces commandes : urxvt -e mocp permet de lancer mocp dans rxvt-unicode et pour l’interface, l’option -G sert de bouton Play/Pause, l’option -f sert à passer au morceau suivant, l’option -r au titre précédent et -s permet de stopper la lecture en cours (pour la reprendre, vous devrez alors passer par l’interface). Il existe de nombreuses autres options. Je vous laisse lire le man !

Voici le résultat :

moc control

Nous en avons donc terminé avec le menu de contrôle. Passons maintenant au raccourcies. En effet, c’est bien sympathique un menu, mais les raccourcies sont plus pratiques. Surtout si vous avez comme moi des touches multimédia sur votre ordinateur (si vous en avez, passez par l’utilitaire xev pour connaitre leur nom).

[key] mod = {"Alt"} key = "Menu" func = "spawn" cmd = "urxvt -e mocp"    [/key]
[key] mod = {"Super", "Alt"} key = "Menu" func = "spawn" cmd = "mocp -x" [/key]
[key] key = "XF86AudioPlay"               func = "spawn" cmd = "mocp -G" [/key]
[key] key = "XF86AudioNext"               func = "spawn" cmd = "mocp -f" [/key]
[key] key = "XF86AudioPrevious"           func = "spawn" cmd = "mocp -r" [/key]
[key] key = "XF86AudioStop"               func = "spawn" cmd = "mocp -s" [/key]

Grace à ces cinq raccourcies, je peux lancer l’interface de Moc grâce à Alt + Menu, stopper le serveur avec Super + Alt + Menu et contrôler la musique grâce aux touches multimédia prévues à cet effet.

Passons maintenant au plus intéressant, l’affichage du titre en cours d’écoute dans la statusbar. Pour ce faire, j’ai concocté un petit script BASH, disponible sur mon dépôt SVN CodingTeam : http://svn.codingteam.net/scripts-radek411/wmfs/moc.sh (en anglais).

Je vais détailler le fonctionnement de ce script, mais voyons tout d’abord son rendu en image :

 

moc-lecture

Lecture

moc-pause

Pause

moc inconnu

Inconnu

moc aucune piste
Aucune piste
moc non lancé

Non Lancé

 

Voici donc le script (en français, cette fois) :

color="\\#02A1CB\\" # Couleur personnalisée
normal="\\#D9D9D9\\" # Couleur normale

_moc () {
if [ -z $(pidof mocp) ]; then # On vérifie si moc est lancé
    moc="[ Music on Console n'est pas lancé ]"
else
    songtitle="`mocp -Q %song`"
    artist="`mocp -Q %artist`"
    currenttime="`mocp -Q %ct`"
    totaltime="`mocp -Q %tt`"
    state="`mocp -Q %state`"
    filetitle="`mocp -Q %file`"
    if [ -z $filetitle ]; then
	# On vérifie si une piste est en cours d'écoute
        moc="[ Aucune piste en cours d'écoute ]"
    else
	if [ -z $artist ]; then # Si une piste est en cours d'écoute, on vérifie que le titre et le nom de l'artiste sont connus
            artist="Inconnu"
        fi
        if [ -z $songtitle ]; then
            songtitle="Inconnu"
        fi
        if [ "$state" ==  "PLAY" ]; then # Si une piste est en cours d'écoute, on vérifie si elle est en pause
             playing1="$color Titre : $normal$songtitle"
             playing2="$color Artiste : $normal$artist"
             playing3="$currenttime"
             playing4="$totaltime"
             moc="[ $playing1       $playing2 ($playing3$color/$normal$playing4) ]"
        else
             playing1="$color Titre : $normal$songtitle"
             playing2="$color Artiste : $normal$artist"
             playing3="$currenttime"
             playing4="$totaltime"
             moc="[ $playing1       $playing2 ($playing3$color/$normal$playing4 -$color Pause $normal) ]"
        fi
    fi
fi
}

En lisant les commentaires, vous pouvez saisir le fonctionnement global. En premier lieu, le script vérifie, grâce au PID, si Moc est lancé. Si oui, on récupère les différentes informations que nous donnes la commande mocp -i (je vous laisse l’essayer). Ceci fait, on vérifie si le titre et le nom de l’artiste sont connus (le contraire ne devrait pas arriver souvent, rares sont les musiques sans tags). Enfin, on vérifie si l’écoute est en pause ou non.

Pour l’intégrer ce script dans votre status.sh WMFS :

color="\\#02A1CB\\" # Custom color
normal="\\#D9D9D9\\" # Normal color

_moc () {
# Script moc.sh
}

status () {
   for arg in $@; do
      _${arg}
      args="${args}  `eval echo '$'$arg`"
   done
   wmfs -s 0 "$args"
   echo "$args"
}

# Affichage
status moc

Et voilà, c’est fini pour cette présentation rapide de Music on Console et son intégration dans WMFS.

J’espère que cela pourra vous être utile.

Vus : 3046
Publié par Radek411 : 11