Changer dynamiquement de carte son

Halut les gens !

Voilà, je viens de récupérer deux enceintes USB qui ont l’air assez chouettes, mais, comme de bien entendu (sinon je n’posterais pas ici), j’ai un peu du mal à les faire tourner.

En fait, elles sont bien détectées par le système, ça me fait une deuxième carte son, et avec des applis comme Audacity, j’peux sélectionner celle que je veux pour jouer dessus, tout marche bien.
En farfouillant sur le net, j’ai trouvé plusieurs pages genre ça qui expliquent comment modifier la conf’ en dur (modprobe et compagnie) pour forcer une carte son ou l’autre.

Seulement, je suis sur un ordi portable, et je ne trimballe pas toujours les enceintes avec moi. En fait, c’est un couple ordi+support, et je laisse les enceintes branchées sur le support, donc je ne m’en sers pas quand je débranche l’ordi. Du coup, une conf’ en dur qui s’active au démarrage, ça ne m’intéresse pas trop : je préférerais une ligne de commande à lancer (si possible pas en root, mais bon, je ferai avec si jamais) qui fasse basculer l’alsa de ma session courante sur une carte ou sur l’autre, pour pouvoir changer ça dynamiquement au moment adéquat.

Je précise que je suis sous Sid, j’utilise directement alsa (pas installé pulseaudio), et que j’utilise un environnement fait maison, donc la conf’ spécifique GNOME/KDE/Xfce/etc. ne conviendra pas non plus.

Quelqu’un aurait-il une idée ?

Ah, au fait, si ça peut aider :

seth@fadreils: ~$ lsusb | grep -i audio Bus 001 Device 003: ID 0d8c:0001 C-Media Electronics, Inc. Audio Device seth@fadreils: ~$ aplay -l **** Liste des Périphériques Matériels PLAYBACK **** carte 0: Intel [HDA Intel], périphérique 0: AD198x Analog [AD198x Analog] Sous-périphériques: 0/1 Sous-périphérique #0: subdevice #0 carte 1: Audio [USB Audio], périphérique 0: USB Audio [USB Audio] Sous-périphériques: 1/1 Sous-périphérique #0: subdevice #0 seth@fadreils: ~$

que dit:

avec les enceintes usb branchées et sans les enceintes usb

Avec :seth@fadreils: ~$ cat /proc/asound/cards 0 [Intel ]: HDA-Intel - HDA Intel HDA Intel at 0xe0624000 irq 45 1 [Audio ]: USB-Audio - USB Audio C-Media INC. USB Audio at usb-0000:00:1a.7-2.3, full speed

Sans :seth@fadreils: ~$ cat /proc/asound/cards 0 [Intel ]: HDA-Intel - HDA Intel HDA Intel at 0xe0624000 irq 45

essaye la commande:

où peut prendre la valeur 0 ou 1 en fonction usb branchée ou pas

autre commande possible:

et je rajoute le lien:

http://forums.bodhilinux.com/index.php?/topic/3800-solved-how-does-a-user-restart-alsa-without-rebooting/

Ces commandes font leur boulot, à savoir remettre la carte son concernée dans son état précédent (volumes, tout ça) ; mais ça ne semble rien changé au fait que les applis, qu’elles aient été lancées avant ou après la manip’, continuent d’utiliser la carte son du PC et pas celle des enceintes USB :confused:

J’ai peut-être loupé un bout, mais je n’ai pas vu grand chose d’autre dans le lien non plus.

Merci, ceci dit.

Sinon un script lié à une règle udev devrait pouvoir permettre de charger dynamiquement la bonne carte.

L’idée n’est pas mauvaise en soit mais je trouve que le plus simple serait tout de même de pouvoir gérer ça depuis le gestionnaire de volume directement de ton bureau chose possible depuis le gestionnaire de son de Gnome il me semble :think:

Pour changer de carte son par défaut, il faut passer par un fichier .asoundrc dans ton home ou plutôt deux avec une bascule par lien symbolique.
Par exemple pour $HOME/.asoundrc.hda :

pcm.!default {
  type plug
    slave.pcm hda
}
pcm.hda {
  type hw
    card 0
    device 0
}

et pour $HOME/.asoundrc.usb :

pcm.!default {
  type plug
    slave.pcm usb
}
pcm.usb {
  type hw
    card 1
    device 0
}

Il ne te reste plus qu’à écrire un petit script qui met à jour le lien vers $HOME/.asoundrc en fonction de ce que tu souhaites.

Script fait :slightly_smiling:

Comme je n’avais pas de ~/.asoundrc jusque là, j’ai simplifié en faisant en sorte de créer le fichier avec les valeurs qui vont bien pour l’USB si « lsusb | grep -i audio » renvoie quelque chose, et de le supprimer sinon ; et à première vue, ça semble marcher. J’aviserai (ou je remonterai ce sujet) en cas de soucis ultérieur.

En tout cas, résolu, merci beaucoup :slightly_smiling:

Grmblm, pas résolu, en fait.

Enfin, si, mais pas pour tout, du coup je décoche temporairement.

La plupart des applis reconnaissent maintenant bien la sortie son sans problème ; mais il y en a quelques unes qui restent coincée sur la carte son interne. Après un tour rapide, je note Mednafen, WarMUX, LiquidWar, et, surtout, MPD.

À la limite, WarMUX et LiquidWar, ç’n’est pas grave, je ne m’en sers pas souvent, et la musique n’est pas non plus essentielle. Mednafen, c’est déjà un peu plus embêtant, je l’utilise quand même pas mal.

MPD, je suppose que c’est logique, compte tenu du fait que le serveur tourne sur un autre compte utilisateur. J’ai tenté, à tout hasard, un lien symbolique du fichier en question entre les deux $HOME, mais ça n’a pas eu l’air de fonctionner.

Donc si quelqu’un avait des idées au moins pour ces deux applis-là…

D’après la doc de Mednafen (dont je n’avais jamais entendu parler auparavant…)

Pour les autres ça doit être sensiblement dans le même ordre d’idée. Par exemple pour MPD, préciser type “alsa” et device “default” dans audio_output (et bien sûr relancer le daemon à chaque changement du fichier .asoundrc).

chez moi en tous cas ma solution fonctionne;j’ai trois cartes son sur mon système et je passe de l’une à l’autre par les commandes que je t’ai indiquées.Bon après faut peut être adapter en fonction de ses périphériques.

D’solé, j’avais complètement zappé ta réponse. C’est probablement faisable depuis les environnements classiques, mais le mien ne gère pas encore ça ; et je préfère de toute façon savoir comment on fait sans passer par les environnements, au cas où (du genre, si je veux brancher des enceintes USB à mon serveur, je saurai comment faire sans avoir à installer GNOME dessus, ce qui serait sacrément moche ^^)

[quote=“lroy”]D’après la doc de Mednafen (dont je n’avais jamais entendu parler auparavant…)

Pour les autres ça doit être sensiblement dans le même ordre d’idée. Par exemple pour MPD, préciser type “alsa” et device “default” dans audio_output (et bien sûr relancer le daemon à chaque changement du fichier .asoundrc).[/quote]
Tout simplement. Toujours regarder la doc ><
Bon, devoir relancer mpd est un peu moins sympa (je suppose que je virerai le mot de passe pour sudoer ça, histoire de pouvoir l’intégrer au script…), mais en tout cas, tout marche nickel :slightly_smiling:
(Et si tu ne connais pas Mednafen, n’hésite pas à regarder, ç’n’est pas mal du tout)

Merci beaucoup, je repasse en résolu ^^