Remarque: Ce script est un essemble de cas. Il est long mais se découpe facilement. Outre la commande awk, j'utilise la commande bash avec comme argument -c qui offre une souplesse non négligeable au Bourn Shell. Je vous laisse le soin de la disséquer.
Remarque: Certaine partie peuvent vous intéresser plus que d'autre. Le cas volume par exemple, pour les utilisateur d'oss, permet d'intégrer une bar de son dans conky. Mais ce script devra surement être modifier pour que vous puissiez l'utiliser.
#!/bin/bash
OSSMIX=
"ossmix"
CONTROL=
"misc.pcm1"
VSTEP=
"1.0"
VMAX=
"63.9"
VMUL=
"2"
function help(){
echo "sound.sh"
echo "arguments:"
echo "play | stop(2x=kill xmms2d) | next | prev | volume (ossmixer) | jack (no speaker) | + | -"
echo "playlist ( next | prev )"
echo "visual ( 1 | 2 | 0 )[1 : DISPLAY=:0.0]"
echo "[2 : DISPLAY=:0.1]"
echo "[0 : DISPLAY=:0.0 & :0.1]"
exit
}
function badopt(){
echo "bad argument: '$1'"
exit
}
function badarg(){
test -z"$2" &&
echo "too few args for $1" ||
echo "'$2' bad arg for $1"
exit
}
function playlist(){
#Avec sed
local GO;
GO="$(nyxmms2 playlist list | awk \
-v cle="$1" '{
set=0;
if(cle=="prev"){ set=-1 }
if(cle=="next"){ set=1 }
playlist[NR]=$0
}END{
for(i=1;i≤NR;i++){
if(playlist[i] ~ /^\*/){
if( i+set > NR ){
sub(/[ ]+/,"",playlist[1]);
print playlist[1];
break;
}
if( i+set == 0 ){
sub(/[ ]+/,"",playlist[NR]);
print playlist[NR]
break;
}
sub(/[ ]+/,"",playlist[i+set]);
print playlist[i+set]
}
}
}')"
nyxmms2 playlist switch "$GO"
nyxmms2 jump 1
}
function libvisual(){
local ARGS=("$@")
test -n "$(pidof xscreensaver)" && xscreensaver-command -exit
for i in $(pidof xmms2-libvisual); do
if [ "$1" = "$( sed -r 's/DISPLAY=(:0\.[0,1]).*/\1/g' /proc/$i/environ)" ]; then
kill $i
ARGS[0]=""
fi
done
test "${ARGS[0]}" = "$1" && DISPLAY="${ARGS[0]}" xmms2-libvisual &
}
case"$1" in
"play")
test -z $(pidof xmms2d) && xmms2-launcher
test "$(nyxmms2 status | sed -r 's/^(Playing|Paused):.*-.*of.*/\1/g')" = "Playing" && nyxmms2 pause || nyxmms2 play
;;
"stop")
test -z $(pidof xmms2d) && exit
test "$(nyxmms2 status | sed -r 's/^(.*):.*-.*of.*/\1/g')" = "Stopped" && nyxmms2 server shutdown || nyxmms2 stop
;;
"next")
test -n "$(nyxmms2 next)" && nyxmms2 jump 1
;;
"prev")
test -n "$(nyxmms2 prev)" && nyxmms2 jump $(nyxmms2 list | tail -n 3 | head -n 1 | sed -r 's/.*\[([0-9]+)\/.*/\1/')
;;
"playlist")
test -z "$2" &&badarg "playlist"
test -n "$(echo "$2" | grep -E "^((next)|(prev))$" )" && playlist "$2" || badarg "playlist" "$2"
;;
"jack")
test "$(ossmix jack.int-speaker.mute | sed -r 's/.*(ON|OFF)/\1/g')" = ON &&
ossmix -q jack.int-speaker.mute OFF ||
ossmix -q jack.int-speaker.mute ON
;;
"volume")
IN=$(ossmix vmix0-outvol|
sed -r 's/.* ([0-9]{1,2}\.[0-9]{1}).*/\1*100\/'$VMAX'\/'$VMUL'/g' |
bc);
for i in $(seq $IN ); do
echo -n \# ;
done
IN=$(echo "$IN*$VMUL" | bc)
echo " $IN%"
;;
"visual")
test -z "$2" && badarg "visual"
case "$2" in
"1")
libvisual ":0.0"
;;
"2")
libvisual ":0.1"
;;
"0")
for i in ":0.0" ":0.1"; do
libvisual "$i"
done
;;
*)
badarg "visual" "$2"
;;
esac
sleep 1
if [[ -z "$(pidof xmms2-libvisual)" && -z "$(pidof xscreensaver)" ]] ; then
/usr/bin/xscreensaver -no-splash -display:0.0 &
fi
;;
"help")
help
;;
*)
test -n "$(echo "+-" | grep "$1")" && SET="$1" || badopt "$1"
ARGS="| sed -r 's/.*to ([0-9]{1,2}\.[0-9]{1}).*/\1'$SET$VSTEP'/g' | bc"
for i in $(seq 2); do
ARGS=$(bash -c"$OSSMIX $CONTROL $ARGS")
done
;;
esac