Acoustic passion

Acoustic passion

Utiliser un script pour modifier le volume de plusieurs cartes sons simultanément

Bonjour,

 

J'utilise 2 cartes sons sur mon systèmes, fusionnées sous ALSA en 1 seul périphérique virtuel. Il m'est donc nécessaire de changer le volume des 2 cartes sons simultanément. J'ai alors réalisé un script relié a mes boutons de "Volume up" et "Volume down" pour varier le volume des cartes simultanément.

 

Nous utiliserons pour cela amixer (la version de alsamixer en ligne de commande, nécessaire pour le script).

 

Un petit amixer --help nous apprend que :

 

-c "NUMERO OU NOM DE LA CARTE" permet de définir la carte son

-scontrols permet d'afficher tout les contrôles disponibles

 

Pour ma part avec ma carte "M1010LT" et "M1010LT_1", la ligne de commande s'écrit donc :

 

amixer -c "M1010LT" scontrols

 

J'obtiens :

 


Simple mixer control 'IEC958',0
Simple mixer control 'IEC958 Multi',0
Simple mixer control 'IEC958 Multi',1
Simple mixer control 'IEC958',1
Simple mixer control 'ADC',0
Simple mixer control 'ADC',1
Simple mixer control 'ADC',2
Simple mixer control 'ADC',3
Simple mixer control 'ADC',4
Simple mixer control 'ADC',5
Simple mixer control 'ADC',6
Simple mixer control 'ADC',7
Simple mixer control 'DAC',0
Simple mixer control 'DAC',1
Simple mixer control 'DAC',2
Simple mixer control 'DAC',3
Simple mixer control 'DAC',4
Simple mixer control 'DAC',5
Simple mixer control 'DAC',6
Simple mixer control 'DAC',7
Simple mixer control 'Deemphasis',0
Simple mixer control 'Deemphasis',1
Simple mixer control 'Deemphasis',2
Simple mixer control 'Deemphasis',3
Simple mixer control 'H/W',0
Simple mixer control 'H/W',1
Simple mixer control 'H/W',2
Simple mixer control 'H/W',3
Simple mixer control 'H/W',4
Simple mixer control 'H/W',5
Simple mixer control 'H/W',6
Simple mixer control 'H/W',7
Simple mixer control 'H/W Multi',0
Simple mixer control 'H/W Multi',1
Simple mixer control 'H/W Multi',2
Simple mixer control 'H/W Multi',3
Simple mixer control 'H/W Multi',4
Simple mixer control 'H/W Multi',5
Simple mixer control 'H/W Multi',6
Simple mixer control 'H/W Multi',7
Simple mixer control 'Multi',0
Simple mixer control 'Multi',1
Simple mixer control 'Multi',2
Simple mixer control 'Multi',3
Simple mixer control 'Multi',4
Simple mixer control 'Multi',5
Simple mixer control 'Multi',6
Simple mixer control 'Multi',7
Simple mixer control 'Multi',8
Simple mixer control 'Multi',9
Simple mixer control 'Multi Track Internal Clock',0
Simple mixer control 'Multi Track Internal Clock Default',0
Simple mixer control 'Multi Track Rate Locking',0
Simple mixer control 'Multi Track Rate Reset',0
Simple mixer control 'Multi Track Volume Rate',0
Simple mixer control 'Word Clock Status',0
Simple mixer control 'Word Clock Sync',0

Ici les contrôles de volume m'intéressant sont ceux des DAC, donc ceux indiqués en gras.
Il suffit alors de créer notre script :
Ouvrons un éditeur (en mode administrateur ou pas selon ou vous souhaitez enregistrer le script) et rentrons ceci :
 

#!/bin/bash

i=0;

for ((; i < 8; i += 1))
do
amixer --card M1010LT sset 'DAC',$i $1 &
amixer --card M1010LT_1 sset 'DAC',$i $1 &
done

Le principe est assez simple. La première ligne permet d'utiliser le bon interpréteur de script (ici /bin/bash)
Ensuite, je crée une variable i initialisée a 0.
Puis une boucle for sans initialiser de variable (si j'initialise la variable i dans la boucle for, je ne pourrais pas y accéder a l'intérieur de la boucle... La condition de sortie de la boucle est <8, et a chaque tour de boucle nous incrémentons la valeur de i de 1. Nous faisons donc 8 tours de boucle (0 à 7).
Dans la ligne en gras, nous exécutons amixer avec les options suivantes :
--card "M1010LT" : nous travaillons sur la carte 1
sset 'DAC',$i $1 &
===> cette ligne est plus complexe et mérite d'être détaillée pour ceux qui ne sont pas habitués au code bash.
$i indique que nous utilisons la valeur de i. ainsi, lorsque i=5, la ligne sera sset 'DAC',5 $1 &, et nous agissons donc sur le volume du DAC numéro 5 de la carte 1. Vous aurez vite compris qu'en faisons varier i de 0 a 7 nous allons agir sur tout les volumes des DAC de chaque carte !
$1 indique que nous utilisons l'argument n°1 envoyé lors de l'exécution du script. Ainsi, lorsque nous exécuterons le script avec une ligne de commande telle que :
script.sh 3+, $1 correspondra a 3+. Ainsi, par l'intermédiaire de cet argument, nous allons contrôler le volume :
- soit on change le volume a un niveau arbitraire (en ayant $1=<valeur>),
- soit on augmente le volume d'un certain niveau a chaque exécution du script (en ayant $1=<valeur>+)
- soit on diminue le volume avec $1= <valeur>-.
 
Il suffit alors de lancer le script avec l'argument voulu :
 
Sous KDE, il faut aller dans "Input Actions" pour configurer les raccourcis claviers. Dans la fenêtre qui s'affiche, cliquer alors sur "Edit>New>Global Shortcut>Command/URL".
Vous nommez ensuite le nom de votre raccourci, par exemple "Volume down".
Vous configurez ensuite la touche associée au raccourci dans l'onglet "trigger".
Enfin vous exécutez le script avec l'argument souhaité, par exemple dans mon cas : /home/jean/Audio/volume.sh 3-
A chaque appuie sur la touche configurée, le volume de tout les DAC des 2 cartes est baissé d'une valeur de 3. On peut aussi configurer par exemple des raccourcis tels que Ctrl+Maj+F1 a F10 en exécutant le script pour régler un niveau arbitraire de 0 a 100 par tranche de 10. Ainsi, il est possible de varier le volume au niveau souhaité très rapidement, puis ajuster avec "+" ou "-".
 
En espérant avoir été clair....


13/10/2011
0 Poster un commentaire

Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 20 autres membres