logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 03-02-2015 07:10:53

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Stretch (9) avec un peu de LibraZik2 dedans
Noyau : Linux 4.9.0-8-lzk-bl-amd64
(G)UI : Xfce 4.12.3
Inscription : 09-08-2013

[gmusicbrowser] afficher informations sur lecture en cours [résolu]

Salut à tous !

Pour écouter de la musique, j'utilise le lecteur gmusicbrowser. Après en avoir testé bien d'autres, je n'ai rien trouvé qui corresponde mieux à mes attentes (enfin si, Nightingale, mais il est très lourd, ma vieille tour supporte pas, et puis il est pas dans les dépots). Et j'aimerais bien pouvoir le commander depuis un panel, comme on peut le faire dans gnome avec panflute, par exemple. J'ai pu sans problème créer des raccourcis pour les fonctions de base (play/pause, stop, etc.), mais j'aurais bien aimé à côté afficher au moins le nom de l'artiste et de la piste. Je pensais à afficher le résultat d'une commande dans genmon, mais pas trouvé de commande qui corresponde. J'ai trouvé comment afficher de telles informations dans conky, mais pas bêtement dans un terminal ou dans genmon. Quelqu'un aurait-il une idée ?

Merci d'avance pour vos réponses !

Dernière modification par Ralph W. Llama (10-02-2015 00:48:23)


Vivre libre ou mourir !

Hors ligne

#2 03-02-2015 08:24:47

nono47
Invité

Re : [gmusicbrowser] afficher informations sur lecture en cours [résolu]

Salut,

oups, désolé ... me suis trompé sad

édition : Ça m’embête de laisser un tel post !

Je voulais proposer une extension gnome qui fait le boulot, mais après avoir poster, j'ai vu dans ton profil que tu étais propulsé par xfce . hmm

Donc pour ceux qui sont sous gnome, il y a Media player indicator  .
Une petite image :
1423371703.png

Peut être existe t'il un équivalent sous xfce qui viendrait se loger dans la barre des tâches ?

smile

Dernière modification par nono47 (08-02-2015 06:06:33)

#3 09-02-2015 22:34:50

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Stretch (9) avec un peu de LibraZik2 dedans
Noyau : Linux 4.9.0-8-lzk-bl-amd64
(G)UI : Xfce 4.12.3
Inscription : 09-08-2013

Re : [gmusicbrowser] afficher informations sur lecture en cours [résolu]

Bon, j'ai commencé à trouver une solution : http://wiki.gmusicbrowser.org/doku.php?id=dbus_api

libnet-dbus-perl était déjà installé, j'ai créé le script perl comme suggéré, qui me donne bien toutes les infos sur le morceau en cours de lecture  :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb
album : With Russia From Love
album_artist : Little Big
album_picture : /home/antoine/sauvegardes/Musique/Little Big/2014 - With Russia From Love/08. Russian Huligans.mp3
artist : Little Big
disc : 1
file : 06. Every Day I'm Drinking.mp3
length : 161
path : /home/antoine/sauvegardes/Musique/Little Big/2014 - With Russia From Love
title : Every Day I'm Drinking
track : 6
uri : file:///home/antoine/sauvegardes/Musique/Little%20Big/2014%20-%20With%20Russia%20From%20Love/06.%20Every%20Day%20I'm%20Drinking.mp3
position : 7.590907029



Plus qu'à isoler les infos que je cherche avec grep et cut.

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb | grep title | cut -c 9-1000
Every Day I'm Drinking



Seulement, j'ai un petit problème avec grep. Jugez plutôt :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb | grep artist
album_artist : Little Big
artist : Little Big



Je voudrais avoir la ligne contenant le mot "artist", mais pas celle contenant le mot "album_artist". Comment faire ?

Merci d'avance pour vos réponses !

EDIT : trouvé, en utilisant sed au lieu de grep ! Plus qu'à mettre ça en forme, et j'explique ici ce que j'ai fait, pour ceux que ça intéresse.

REEDIT : donc voilà ce que j'ai fait. Dans un premier temps, le script perl que voici :

#!/usr/bin/perl
use warnings;
use strict;
use Net::DBus;

my $bus = Net::DBus->session;
my $service = $bus->get_service('org.gmusicbrowser');
my $object = $service->get_object('/org/gmusicbrowser', 'org.gmusicbrowser');

my $info= $object->CurrentSong;
print "$_ : $info->{$_}\n" for sort keys %$info;
print "position : ".$object->GetPosition."\n";



Et ensuite, comme je peux pas utiliser sed directement dans genmon, je dois passer par d'autres scripts. J'ai pensé au départ en créer un seul avec des variables :

#!/bin/bash

album=$(/home/antoine/.scripts/gmb | sed -n 1p | cut -c 9-1000)
album_artist=$(/home/antoine/.scripts/gmb | sed -n 2p | cut -c 16-1000)
artist=$(/home/antoine/.scripts/gmb | sed -n 4p | cut -c 10-1000)
title=$(/home/antoine/.scripts/gmb | sed -n 9p | cut -c 9-1000)
track=$(/home/antoine/.scripts/gmb | sed -n 10p | cut -c 9-1000)

echo "$artist - $title"



mais le script est trop long à s'exécuter, c'est chiant. Du coup j'ai du faire plusieurs petits scripts, un pour chaque variable :

#!/bin/bash
/home/antoine/.scripts/gmb | sed -n 9p | cut -c 9-1000



Plus qu'à mettre l'adresse des scripts dans des genmon sur le panel, et voilà le résultat :

16487066895_fc7dd20ea2_o.png

Les boutons sont des lanceurs avec des commandes comme gmusicbrowser -cmd PlayPause, vous pouvez avoir une liste des commandes disponibles en tapant gmusicbrowser -listcmd.

Voilà ! Je m'y connais pas trop en scripts, donc ma solution n'est pas forcément la plus simple, mais elle marche. Tout suggestion d'amélioration est la bienvenue.

Dernière modification par Ralph W. Llama (10-02-2015 00:46:47)


Vivre libre ou mourir !

Hors ligne

#4 24-03-2015 23:25:08

Ralph W. Llama
Membre
Lieu : /dev/null
Distrib. : Stretch (9) avec un peu de LibraZik2 dedans
Noyau : Linux 4.9.0-8-lzk-bl-amd64
(G)UI : Xfce 4.12.3
Inscription : 09-08-2013

Re : [gmusicbrowser] afficher informations sur lecture en cours [résolu]

Comme je disais dans le topik sur l'article du wiki, voilà les détails de ce que j'ai fait.

Je suis donc parti du script perl trouvé dans le wiki gmusicbrowser :

#!/usr/bin/perl
use warnings;
use strict;
use Net::DBus;

my $bus = Net::DBus->session;
my $service = $bus->get_service('org.gmusicbrowser');
my $object = $service->get_object('/org/gmusicbrowser', 'org.gmusicbrowser');

my $info= $object->CurrentSong;
print "$_ : $info->{$_}\n" for sort keys %$info;
print "position : ".$object->GetPosition."\n";



J'ai créé le script sous le nom suivant : /home/antoine/.scripts/gmb.pl (j'ai créé un dossier dans mon /home pour mettre mes scripts à moi, ce qui ne me pose pas de problème vu que je n'ai qu'une session utilisateur sur mes ordis, mais c'est pas forcément le meilleur emplacement, je vous laisse donner votre avis...)
L'exécution de ce script me donne donc une liste d'information sur la lecture en cours :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb.pl
album : Split The Atom
album_artist : Noisia
album_picture : /home/antoine/sauvegardes/Musique/Noisia/Split The Atom/Split The Atom.jpg
artist : Noisia
disc : 1
file : 04 - Split The Atom.mp3
length : 342
path : /home/antoine/sauvegardes/Musique/Noisia/Split The Atom
title : Split The Atom
track : 4
uri : file:///home/antoine/sauvegardes/Musique/Noisia/Split%20The%20Atom/04%20-%20Split%20The%20Atom.mp3
position : 148.083375



Je dois donc extraire du résultat de cette commande les informations à afficher sur mon panel Xfce. Pour afficher les informations, j'utilise le greffon genmon. Je n'ai pas vérifié, mais il existe certainement des équivalents pour les autres environnements de bureau. Mais comme genmon ne peut donner que le retour d'une commande simple, je dois créer de nouveaux scripts, en utilisant les commandes sed et cut. Un petit exemple :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb.pl | sed -n 9p | cut -c 9-1000
Aerodynamic (Specimen A & James D'ley re-fix)



Pas bien compliqué, me direz vous. Seulement, si je ferme gmusicbrowser, voici ce que me donne la commande :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb.pl | sed -n 9p | cut -c 9-1000
org.freedesktop.DBus.Error.ServiceUnknown: The name org.gmusicbrowser was not provided by any .service files



Je ne doit donc afficher le résultat de cette commande que si gmusicbrowser est lancé. En gros, me faut du if dans mon script, quoi. Mais if quoi ? Je n'ai pas trouvé de commande permettant de savoir si un logiciel était lancé, si vous avez quelque chose dans le genre les suggestions sont les bienvenues. En attendant, j'ai remarqué une chose : quand gmusicbrowser est fermé, la commande ~/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000 qui permet d'afficher le numéro de la piste donnait un résultat vide. Voici donc le contenu de mon script d'affichage du titre, enregistré sous le nom ~/.scripts/gmb_title.sh :

#!/bin/bash

if [ $(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000) = $NULL ]
then
  echo " "
else
  /home/antoine/.scripts/gmb.pl | sed -n 9p | cut -c 9-1000
fi



Quand je le lance dans un terminal, voici ce que j'obtiens :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb_title.sh
/home/antoine/.scripts/gmb_title.sh: ligne 3 : [: 0 : opérateur unaire attendu
Pour Un Rasage De Très Près Et Un Confort Absolu



Seule la seconde ligne s'affiche dans le genmon, mais j'aimerais tout de même bien savoir ce qui cause la première. Une idée ?

Ensuite, mon deuxième script : ~/.scripts/gmb_artist.sh. Il est un peu plus compliqué, vu que je veux afficher dedans l'artiste et l'album, ainsi que le numéro de piste s'il n'est pas égal à 0. En effet, lors qu'il n'y a pas de numéro de piste enregistré dans les tags du fichier audio, la commande affichant ce dernier me donne 0. Voici donc le contenu du script :

#!/bin/bash

if [ $(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000) = $NULL ]
then
  echo " "
else
  echo "$(/home/antoine/.scripts/gmb.pl | sed -n 4p | cut -c 10-1000)"
  if [ $(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000) = 0 ]
  then
    echo "$(/home/antoine/.scripts/gmb.pl | sed -n 1p | cut -c 9-1000)"
  else
    echo "$(/home/antoine/.scripts/gmb.pl | sed -n 1p | cut -c 9-1000)   [$(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000)]"
  fi
fi



Et voici son exécution dans un terminal :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb_artist.sh
/home/antoine/.scripts/gmb_artist.sh: ligne 3 : [: 8 : opérateur unaire attendu
The Prodigy
Experience: Expanded   [8]



Les crochets avec le numéro n'apparaissant pas si aucun numéro de piste n'est enregistré dans les tags. On note le même problème sur la première ligne, qui ne s'affiche toujours pas dans le genmon.

Tout cela, associé à des lanceurs avec les commandes suivantes :

gmusicbrowser -cmd PrevSong
gmusicbrowser -cmd Stop
gmusicbrowser -cmd PlayPause
gmusicbrowser -cmd NextSong



et des icônes trouvés dans "Icônes des actions", une fois mis en forme avec les séparateurs qui vont bien, donne donc le résultat suivant :

16919646781_bd264c7519.jpg

Et quand gmusicbrowser est éteint :

16919656321_f9d7ac004b.jpg

Notez que les 4 lanceurs lancent gmusicbrowser lors qu'il est éteint.

Voilà, que pensez-vous de tout ça ? Que voyez-vous à améliorer ?

EDIT : j'ai trouvé comment rendre mes scripts plus propres :

#!/bin/bash

if [ "$(ps -e | grep gmusicbrowser)" != "$NULL" ]
then
  /home/antoine/.scripts/gmb.pl | sed -n 9p | cut -c 9-1000
else
  echo " "
fi



#!/bin/bash

if [ "$(ps -e | grep gmusicbrowser)" != "$NULL" ]
then
  echo "$(/home/antoine/.scripts/gmb.pl | sed -n 4p | cut -c 10-1000)"
  if [ "$(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000)" = "0" ]
  then
    echo "$(/home/antoine/.scripts/gmb.pl | sed -n 1p | cut -c 9-1000)"
  else
    echo "$(/home/antoine/.scripts/gmb.pl | sed -n 1p | cut -c 9-1000)   [$(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000)]"
  fi
else
  echo " "
fi



En plus, plus de ligne bizarre, je n'obtiens que les informations que je veux :

antoine@Ordinosaurus-Rex:~$ ~/.scripts/gmb_artist.sh
Cut & Run
Sound In Motion / Darkside   [2]



Et sinon, j'en ai profité pour me créer des scripts, pour que les boutons ne fonctionnent que quand gmusicbrowser est lancé. Un exemple, ~/.scripts/gmb_playpause.sh :

#!/bin/bash

if [ "$(ps -e | grep gmusicbrowser)" != "$NULL" ]
then
  gmusicbrowser -cmd PlayPause
fi



A priori rien à modifier, qu'en pensez-vous ?

REEDIT : petite simplification du if, et je vire quelques echo qui servaient à rien :

#!/bin/bash

if pgrep gmusicbrowser &>/dev/null
then
  /home/antoine/.scripts/gmb.pl | sed -n 9p | cut -c 9-1000
else
  echo " "
fi



#!/bin/bash

if pgrep gmusicbrowser &>/dev/null
then
  /home/antoine/.scripts/gmb.pl | sed -n 4p | cut -c 10-1000
  if [ "$(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000)" = "0" ]
  then
    /home/antoine/.scripts/gmb.pl | sed -n 1p | cut -c 9-1000
  else
    echo "$(/home/antoine/.scripts/gmb.pl | sed -n 1p | cut -c 9-1000)   [$(/home/antoine/.scripts/gmb.pl | sed -n 10p | cut -c 9-1000)]"
  fi
else
  echo " "
fi



Et je simplifie aussi les scripts des lanceurs :

#!/bin/bash

pgrep gmusicbrowser &>/dev/null && gmusicbrowser -cmd PlayPause

Dernière modification par Ralph W. Llama (26-03-2015 14:08:17)


Vivre libre ou mourir !

Hors ligne

Pied de page des forums