Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

@+

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

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? big_smile

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 smile

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 wink

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)

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 wink (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)

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 smile
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)

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

MacLane45 a écrit :

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%

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 big_smile
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

climu a écrit :

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