Pages : 1
#1 Le 08/10/2008, à 14:21
- climu
[resolu]aide pour script mute
bonjour,
Je possede une carte son qui nécéssite de controller 2 cannaux en meme temps.
JE sohaite créer un scripte pour muter ses 2 cannaux.
La commande suivante me permet de récupéré le volume.
climu@climordi:~$ amixer -c 0 get 'DAC',1 | grep % | cut -d':' -f2 | cut -d'[' -f1
86
L'idée est d'enregistrer ce volume quelque part (ou?tmp?).
de passer le vollume a 0:
amixer -c 0 set 'DAC',0 0 && amixer -c 0 set 'DAC',1 0
puis quand on démute de lire l'ancien volume, et de remmettre ce volume en place.
#!/bin/bash
v =amixer -c 0 get 'ADC',0 | grep % | cut -d':' -f2 | cut -d'[' -f1
case $v in
0) v = cat /tmp/mute
amixer -c 0 set 'DAC',0 $v && amixer -c 0 set 'DAC',1 $v;;
*)echo $v >> /tmp/mute
amixer -c 0 set 'DAC',0 0 && amixer -c 0 set 'DAC',1 0;;
esac
Je ne sais pas faire de script, et je ne connais rien a bash,. Juste un peu d'apprentissage au besoin a l'arrache.
Le probleme c'est surtout: amixer -c 0 set 'DAC',0 $v
Parceque v c'est un string, pas un entier. et ca ca craint !
Le dossier tmp serra bien supprimé a chaque démmarage?
merci d'avance de votre aide
Dernière modification par climu (Le 10/10/2008, à 10:03)
Hors ligne
#2 Le 08/10/2008, à 15:42
- MacLane45
Re : [resolu]aide pour script mute
Salut climu
Je peux te développer ton script bash avec un peu de temps mais je ne pourrais pas le tester, en revanche je te détaillerai les commandes.
Si ca t'intéresse dis-le y à pas de souci
@+
if exist $probleme ;
then Googlise au moins une demie heure; plus une demie heure de doc Ubuntu;
else A lire absolument avant de poster !
fi
Hors ligne
#3 Le 08/10/2008, à 17:16
- climu
Re : [resolu]aide pour script mute
Merci maclane, avec plaisir.
Si tu as la flemme explique moi juste comment faire reconnaitre a bash que
climu@climordi:~$ amixer -c 0 get 'DAC',1 | grep % | cut -d':' -f2 | cut -d'[' -f1
86
est un entier pour que je puisse l'injecter dans le reglage du volume....
Mais si tu es motiv, je veux bien un script propre .... avec éventuellement des explication...
Dans tout les cas merci.
Hors ligne
#4 Le 09/10/2008, à 08:19
- MacLane45
Re : [resolu]aide pour script mute
Normalement ca devrait le faire, si tu as des erreurs à l'execution dis le moi
#!/bin/bash
# Definition des variable de volumes en cours et par defaut
current_vol="amixer -c 0 get 'ADC',0 | grep % | cut -d':' -f2 | cut -d'[' -f1"
default_vol="86"
# Debut du test du volume, si le volume est à 0
# on utilisera la valeur de $default_vol
# sinon on repasse le volume à 0
if [[ $current_vol == 0 ]]
then
amixer -c 0 set 'DAC',0 $default_vol
amixer -c 0 set 'DAC',1 $default_vol
else
amixer -c 0 set 'DAC',0 0
amixer -c 0 set 'DAC',1 0
fi
# On sort du script
exit 0
if exist $probleme ;
then Googlise au moins une demie heure; plus une demie heure de doc Ubuntu;
else A lire absolument avant de poster !
fi
Hors ligne
#5 Le 09/10/2008, à 09:31
- climu
Re : [resolu]aide pour script mute
merci beaucoup maclane.
Bon ca marche pas, mais ca arrive que ca marche du premier coup?
Ca coupe bien le son,
Mais par contre meme quand le son est déja a 0 il efféctue le else....
Pour débugger j'ai ajouté un echo dans le esle:
else
echo "mute"
amixer -c 0 set 'DAC',0 0
amixer -c 0 set 'DAC',1 0
Donc je crois que le probleme, c'est comme je disais que current_vol c'est un string et non un entier.... Donc dans le test, il ne vaut pas 0 mais "0"...
Une autre remarque c'est que default vol je veu pas forcément que ca soit 86. L'ideal cela serait d'enregistrer current_vol avant de muter.
De récupérer cette valeur quand on démute.
OU est-ce qu'on doit enregistrer une tel valeur? /dev/nul? /tmp?
sinon j'ai récupéré un script qui fait ca: ici
#! /bin/bash
#
#mute.sh written by : xlolo <xlolo@free.fr>
#this script is free software according to the GNU General Public License (see http://www.gnu.org/licenses/gpl.html)
#
########## Made by xlolo@free.fr ##########
a=$(aumix -q | head -1 | awk {'printf $2'})
b=${a%,*}
if [ "$b" == "0" ]; then
aumix -L > /dev/null
else
aumix -q > ~/.aumixrc
aumix -v0
fi
a adapter....
Encore un grand merci a toi
Hors ligne
#6 Le 09/10/2008, à 09:35
- climu
Re : [resolu]aide pour script mute
J'ai essayé comme cela:
#!/bin/bash
# Definition des variable de volumes en cours et par defaut
current_vol=$(amixer -c 0 get 'ADC',0 | grep % | cut -d':' -f2 | cut -d'[' -f1)
default_vol="86"
# Debut du test du volume, si le volume est à 0
# on utilisera la valeur de $default_vol
# sinon on repasse le volume à 0
echo $current_vol
if [[ "current_vol" == "0" ]]
then
amixer -c 0 set 'DAC',0 $default_vol
amixer -c 0 set 'DAC',1 $default_vol
else
echo "mute"
amixer -c 0 set 'DAC',0 0
amixer -c 0 set 'DAC',1 0
fi
# On sort du script
exit 0
Meme probleme.....
Dernière modification par climu (Le 09/10/2008, à 09:36)
Hors ligne
#7 Le 09/10/2008, à 09:51
- MacLane45
Re : [resolu]aide pour script mute
Bon ca marche pas, mais ca arrive que ca marche du premier coup?
Personnellement c'est rare ^_^ en général je tatonne pendant un moment
Et comme ca ?
#!/bin/bash
# Definition des variable de volumes en cours et par defaut
current_vol=`amixer -c 0 get 'ADC',0 | grep % | cut -d':' -f2 | cut -d'[' -f1`
default_vol="86"
echo $current_vol
# Pause il faut appuyer sur entree
read
# Debut du test du volume, si le volume est à 0
# on utilisera la valeur de $default_vol
# sinon on repasse le volume à 0
if [[ "current_vol" == "0" ]]
then echo "mute off"
amixer -c 0 set 'DAC',0 $default_vol
amixer -c 0 set 'DAC',1 $default_vol
fi
if [[ "current_vol" =! "0" ]]
then echo "mute on"
amixer -c 0 set 'DAC',0 0
amixer -c 0 set 'DAC',1 0
fi
# On sort du script
exit 0
[Pour info]la valeur de current_vol est une valeur numérique, donc normalement ca suffit, en plus en shell tu ne déclares pas de type de variables, tu affectes ...
Dernière modification par MacLane45 (Le 09/10/2008, à 09:54)
if exist $probleme ;
then Googlise au moins une demie heure; plus une demie heure de doc Ubuntu;
else A lire absolument avant de poster !
fi
Hors ligne
#8 Le 09/10/2008, à 15:16
- climu
Re : [resolu]aide pour script mute
quite a me répeter:
Une autre remarque c'est que default vol je veu pas forcément que ca soit 86. L'ideal cela serait d'enregistrer current_vol avant de muter.
De récupérer cette valeur quand on démute.
je teste le nouveau....
Hors ligne
#9 Le 09/10/2008, à 15:24
- climu
Re : [resolu]aide pour script mute
pas mieux... meme pire
climu@climordi:~/scripts$ ./mute.sh
127
./mute.sh: line 20: opérateur binaire conditionnel attendu
./mute.sh: line 20: Erreur de syntaxe près de « =! »
./mute.sh: line 20: `if [[ "current_vol" =! "0" ]]'
il ne mute meme plus.
et sinon je suis pas sur que ce soit une variable numérique...
PArceque je larécupere a partir de cela...
climu@climordi:~/scripts$ amixer -c 0 get 'ADC',0 | grep %
Mono: 104 [64%] [-11.50dB]
Et ca ressemble a une chaine de caractere....
Dernière modification par climu (Le 09/10/2008, à 15:24)
Hors ligne
#10 Le 09/10/2008, à 16:01
- MacLane45
Re : [resolu]aide pour script mute
echo "Mono: 104 [64%] [-11.50dB]" | awk '{print $3}' | cut -c 2,3
64
Donc on reprend (j'lacherai pas l'affaire tant que ca marchera pas, je suis comme ça moi têtu)
#!/bin/bash
# Definition des variable de volumes en cours et par defaut
current_vol=`amixer -c 0 get 'ADC',0 | grep % | awk '{print $3}' | cut -c 2,3 `
default_vol="86"
echo $current_vol
# Pause il faut appuyer sur entree
read
# Debut du test du volume, si le volume est à 0
# on utilisera la valeur de $default_vol
# sinon on repasse le volume à 0
if [[ "current_vol" == "0" ]]
then echo "mute off"
amixer -c 0 set 'DAC',0 $default_vol
amixer -c 0 set 'DAC',1 $default_vol
fi
if [[ "current_vol" != "0" ]]
then echo "mute on"
amixer -c 0 set 'DAC',0 0
amixer -c 0 set 'DAC',1 0
fi
# On sort du script
exit 0
Dernière modification par MacLane45 (Le 09/10/2008, à 16:02)
if exist $probleme ;
then Googlise au moins une demie heure; plus une demie heure de doc Ubuntu;
else A lire absolument avant de poster !
fi
Hors ligne
#11 Le 09/10/2008, à 19:36
- climu
Re : [resolu]aide pour script mute
j'lacherai pas l'affaire tant que ca marchera pas, je suis comme ça moi têtu
Merci encore
sinon rien de neuf
climu@climordi:~/scripts$ ./mute.sh
78
mute on
Simple mixer control 'DAC',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 127
Mono: 0 [0%] [-99999.99dB]
Simple mixer control 'DAC',1
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 127
Mono: 0 [0%] [-99999.99dB]
puis
climu@climordi:~/scripts$ ./mute.sh
0%
mute on
Simple mixer control 'DAC',0
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 127
Mono: 0 [0%] [-99999.99dB]
Simple mixer control 'DAC',1
Capabilities: volume volume-joined
Playback channels: Mono
Capture channels: Mono
Limits: 0 - 127
Mono: 0 [0%] [-99999.99dB]
sinon, je me suis permi de rajouter l'option -q a amixer, parceque les verbeux, sa me les brisais un peu...
les retours sont plus joli comme cela non?
climu@climordi:~/scripts$ ./mute.sh
58
mute on
climu@climordi:~/scripts$ ./mute.sh
0%
mute on
Hors ligne
#12 Le 10/10/2008, à 07:57
- MacLane45
Re : [resolu]aide pour script mute
Salut Climu !
Mon souci c'est que je développe ce script sur des machines au boulot qui ne sont pas des Ubuntu et qui n'ont pas amixer, donc c'est un peu plus délicat.
Ce qu'il faut faire dans l'ordre :
1) Récuperer la valeur du volume de amixer en pensant au fait que quand c'est 0% on a que 2 caractères et à partir de 10% on a 3 caractères.
2) En fonction de la réponse affecter la variable à un volume voulu
echo "Mono: 104 [64%] [-11.50dB]" | awk '{print $3}' | cut -c 2,3
64
echo "Mono: 104 [0%] [-11.50dB]" | awk '{print $3}' | cut -c 2,3
0%
#!/bin/bash
# Definition des variable de volumes en cours et par defaut
#current_vol=`amixer -c 0 get 'ADC',0 | grep % | awk '{print $3}' | cut -c 2,3 `
current_vol=`echo "Mono: 104 [64%] [-11.50dB]"`
default_vol="86"
# Debut du test du volume, si le volume est à 0%
# on utilisera la valeur de $default_vol
# sinon on repasse le volume à 0
if [[ "current_vol" == "0%" ]]
then echo "Volume off => On allume"
amixer -c 0 set 'DAC',0 $default_vol
amixer -c 0 set 'DAC',1 $default_vol
else
echo "Volume on => On eteint"
amixer -c 0 set 'DAC',0 0
amixer -c 0 set 'DAC',1 0
fi
exit 0
Dernière modification par MacLane45 (Le 10/10/2008, à 08:34)
if exist $probleme ;
then Googlise au moins une demie heure; plus une demie heure de doc Ubuntu;
else A lire absolument avant de poster !
fi
Hors ligne
#13 Le 10/10/2008, à 08:07
- morphoneo69
Re : [resolu]aide pour script mute
Vous en êtes où, quels sont les erreurs ?
J'ai fais un essai sur mon PCM, ça fonctionne mais il y a pas le probleme du passage de 2 à 3 chiffres.
#!/bin/bash
t="'PCM'"
v=$(amixer -c 0 get $t,0 | grep % |grep Left | awk '{print $4}' )
echo $v
amixer -c 0 set $t,0 0
amixer -c 0 set $t,0 $v
Dernière modification par morphoneo69 (Le 10/10/2008, à 08:23)
Hors ligne
#14 Le 10/10/2008, à 08:24
- morphoneo69
Re : [resolu]aide pour script mute
Salut Climu !
Mon souci c'est que je développe ce script sur des machines au boulot qui ne sont pas des Ubuntu et qui n'ont pas amixer, donc c'est un peu plus délicat.
Ce qu'il faut faire dans l'ordre :
1) Récuperer la valeur du volume de amixer en pensant au fait que quand c'est 0% on a que 2 caractères et à partir de 10% on a 3 caractères.
2) En fonction de la réponse affecter la variable à un volume vouluecho "Mono: 104 [64%] [-11.50dB]" | awk '{print $3}' | cut -c 2,3 64 echo "Mono: 104 [0%] [-11.50dB]" | awk '{print $3}' | cut -c 2,3 0%
Pourquoi récupere le %, il suffit de récupere le 104. Et c'est fini.
Hors ligne
#15 Le 10/10/2008, à 08:48
- morphoneo69
Re : [resolu]aide pour script mute
J'ai refait un petit truc plus complet qui fonctionne sur PCM, voila le code :
#!/bin/bash
t="'PCM'"
v=$(amixer -c 0 get $t,0 | grep % |grep Left | awk '{print $4}' )
##Si volume est à 0, récupérer dans un fichier
if (test $v = 0);
then
echo "Mute on"
v=$(cat /tmp/fic)
amixer -c 0 set $t,0 $v
else
echo "Mute Off";
amixer -c 0 get $t,0 | grep % |grep Left | awk '{print $4}' > /tmp/fic
amixer -c 0 set $t,0 0
fi
Pour que ça marche chez toi vu tes données :
#!/bin/bash
t="'DAC'"
v=$(amixer -c 0 get $t,1 | grep % | awk '{print $2}' )
##Si volume est à 0, récupérer dans un fichier
if (test $v = 0);
then
echo "Mute on"
v=$(cat /tmp/fic)
amixer -c 0 set $t,0 $v
amixer -c 0 set $t,1 $v
else
echo "Mute Off";
amixer -c 0 get $t,1 | grep % | awk '{print $2}' > /tmp/fic
amixer -c 0 set $t,0 0
amixer -c 0 set $t,1 0
fi
Hors ligne
#16 Le 10/10/2008, à 10:02
- climu
Re : [resolu]aide pour script mute
Yepee
le truc de morphoneo marche nickel....
Un grand merci a vous deux !
Je suppose que le dossier tmp sera supprimé a l'extinction ?
Bon et bien je passe en résolu....
Hors ligne
#17 Le 10/10/2008, à 11:38
- morphoneo69
Re : [resolu]aide pour script mute
Je suppose que le dossier tmp sera supprimé a l'extinction ?
Son contenu est effacé. Au pire le fichier contiendra une ligne donc normalement ça te coutera pas beaucoup d'octets.
Hors ligne
Pages : 1