Carte son, zappette et enceintes

Publié le 16 mai 2008 par Dxxcorp

Un pote m’a “prêté” (en vue de me vendre) des enceintes de monitoring.

Pour des problèmes de câblage que je vous épargne, je suis obligé de brancher ces enceintes sur la sortie casque du boîtier de ma carte son (une Audigy 2 platinum avec boîtier externe, pour lequel j’ai dû galérer pour le faire fonctionner).

Or, je règle le son non pas par le moniteur de son de Gnome mais par le bouton des enceintes (pas de monitoring, les autres, celles de base) : je laisse le son de Gnome toujours au même niveau.

Et ce bouton ne règle pas le volume du casque, of course (puisque le bouton des enceintes n’a rien à voir avec le son à la sortie de la carte son), et il n’y a pas de volume de son pour le casque.

Ca fait quelque temps que lirc est installé sur mon ordi, sans qu’il serve à quoi que ce soit (à part m’avoir fait couché tard pas mal de soirs, et avoir la satisfaction que la zappette du boîtier externe fonctionne) (oui, lirc est le seul qui permette de savoir ce que fait le boîtier externe, me demandez pas pourquoi…). lirc permet de lancer des commandes à la réception de signaux. Je l’avait donc configuré, juste pour le fun, pour qu’il fasse previous/next sur mpd.

Et là, je veux que le bouton de volume du boîtier externe règle le son, au lieu de rester bêtement inactif.

Or ce volume doit être indépendant de mpd (mpd permet aussi de régler le volume, mais si mpd n’est pas lancé je veux que le bouton fonctionne tout de même). Exit donc les commandes du genre ‘mpc volume +1′

Et c’est parti pour une baston contre alsa.

Alsa est génial, certes, mais la doc n’est pas son point fort. Néanmoins il permet de tout faire en ligne de commande. Absolument tout, jusque dans les moindres détails: gérer les bass/treble, canal gauche/droite, volume casque, micro, spdif, tout. Suffit de savoir lui parler.

Le salut est venu de amixer. Amixer permet de trifouiller les paramètres de la carte son: volume d’entrée et de sortie, bass, treble, tout le tintouin.

Tapez ‘amixer’ dans un terminal et vous aurez un aperçu de ce qu’il peut contrôler.

Juste pour l’exemple:

$ amixer get Master
Simple mixer control 'Master',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 5 [16%] [-39.00dB] [on]
Front Right: Playback 5 [16%] [-39.00dB] [on]

Et:

$ amixer set Master 6
Simple mixer control 'Master',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 6 [19%] [-37.50dB] [on]
Front Right: Playback 6 [19%] [-37.50dB] [on]

Magique

Mais c’est pas ce que je veux. Je veux qu’en tournant ça augment ou baisse le son. Du coup:

$ amixer set Master 1%-

Ou:

$ amixer set Master 1%+

Ca, c’est fait

Maintenant, je veux qu’en appuyant sur le bouton de volume, ca fasse mute (le bouton est prévu pour). Là, faut fouiller un peu plus parce que l’option ‘toggle’ ou ‘mute’ de ‘amixer set’ ne fonctionne pas.

Faites donc ‘amixer controls’ et recherchez la ligne ‘Master Volume quelque chose’

Moi, ça a le numid 28.

Juste pour vérifier:

$ amixer cget numid=28
numid=28,iface=MIXER,name='Master Playback Volume'
; type=INTEGER,access=rw---R--,values=1,min=0,max=100,step=0
: values=32
| dBscale-min=-40.00dB,step=0.40dB,mute=1

‘amixer cset numid=28 6′ a le même effet que ‘amixer set Master 6′

Et ‘amixer cset’ accepte l’option toggle!

Plus qu’à mettre tout ça dans /etc/lircrc:

begin
remote = rm1500
prog = irexec
button = mute
config = /usr/bin/amixer cset numid=28 toggle
repeat = 1
end

begin
remote = audigy_io_hub
prog = irexec
button = mute
config = /usr/bin/amixer cset numid=28 toggle
repeat = 1
end

begin
remote = rm1500
prog = irexec
button = vol-
config = /usr/bin/amixer sset Master,0 1%-
repeat = 1
end

begin
remote = audigy_io_hub
prog = irexec
button = vol-
config = /usr/bin/amixer sset Master,0 1%-
repeat = 1
end

begin
remote = rm1500
prog = irexec
button = vol+
config = /usr/bin/amixer sset Master,0 1%+
repeat = 1
end

begin
remote = audigy_io_hub
prog = irexec
button = vol+
config = /usr/bin/amixer sset Master,0 1%+
repeat = 1
end

Un petit ‘/etc/init.d/irexec restart’ (sur ma Gentoo, je sais pas chez vous) et hop! le volume se règle à la zappette et au bouton de volume du boîtier externe, et en même temps ca fait bouger les barres de volume dans le moniteur de son de Gnome

Quand j’appuie sur le bouton, ça fait bien mute, mais une seconde pression ne remet pas le volume à son niveau initial: il faut que j’augmente le volume ‘à la main’ (à la zappette ou au bouton).

Bug or feature?