Skip to main content

5 - Les serveurs son : JACK, PipeWire, PulseAudio et autres...


Tester une carte son par script [RÉSOLU]

France
Bonjour,
J'ai besoin d'ajouter à mon script bash de démarrage de qjackctl un test pour savoir si une carte son usb spécifique est connectée ou non.
J'ai plusieurs cartes son donc une usb externe.
Je cherche donc la commande qui me permettrait de savoir si elle est en fonction on non.
Je viens de chercher pendant deux heures mais bizarrement je ne trouve pas.
Il y a surement plusieurs solutions.
Je crois que la carte son est un périphérique de type "caractère" donc je pourrais utiliser une commande du type (celle-ci est pour un modem) :

Copy to clipboard
device1="/dev/ttyS1" # carte modem PCMCIA if [ -c "$device1" ] then echo "" fi


mais je ne trouve pas l'équivalent pour la carte son.

Je suis ouvert à toute suggestion 😊
merci par avance
Carl
France
Hello,

Faire un truc équivalent avec la commande lsusb ?

A+
r1
France
Note modération : merci d'utiliser la balise CODE lorsque tu copies/colles du code sur le site. Celles-ci permettent un meilleur affichage.
Lmao Code
Voir également cette page.

France
Merci pour le conseil, je vais creuser de ce côté-là.

Et désolé pour le code, je ferai attention la prochaine fois. C'est vrai que c'est beaucoup plus lisible.

A+
France
Bonjour carlus,

Je pense que ta "carte son usb externe" va se trouver dans le répertoire :
Copy to clipboard
/dev/snd/by-id

France
et voilà c'est fini.
Je mets le script ici si cela intéresse quelqu'un.
Le but était de vérifier que ma carte son externe était bien allumé avant de lancer qjackctl vu qu'une fois sur deux j'oubliais.
Comme j'exécute un script automatiquement au lancement de jack pour tout connecter j'avais plein d'erreurs dans ce cas.
Je vais donc rajouter ce code au début de mon script.
Mais permet de tester également n'importe quel périphérique usb pour savoir s'il est bien branché avant d'exécuter autre chose.

Copy to clipboard
#!/bin/bash # On lance une boucle pour vérifier si la carte son est lancée while true; do # on teste l'entrée lsusb avec le code hexa du périphérique # remplacez "1397:0509" par le code de votre périphérique usb (carte son, webcam, # imprimante, etc.) que vous trouverez en faisant "lsusb" dans la console result=$(lsusb | grep "1397:0509") # si la carte est branchée et reconnue on sort de la boucle et on continue if [ $? -eq 0 ] then break # sinon on demande à l'utilisateur ce qu'il veut faire else echo "La carte son n'est pas allumée. Relancer ? (y/n)" : # on capture son entrée clavier read -n1 -s input # on réagit en fonction de son choix case "$input" in # il répond "y" on relance la boucle pour vérifier qu'il a bien allumé la carte "y") continue ;; # il répond non on quitte "n") exit 0 ;; # il a saisi un autre caractère on l'alerte *) echo "Choix non proposé." continue ;; esac fi done #suite du programme... echo "ça continue..." sleep 5

France
Super ! une bonne nouvelle que voilà !
Finalement tu n'as pas utilisé "/dev/..." mais lsusb ? pourquoi pas après tout ! 😊

Maintenant, si tout fonctionne bien il ne te reste plus qu'à :

Note modération : le sujet étant résolu, merci d'ajouter un [RÉSOLU] (ou un [CONTOURNÉ], ou bien encore un [ABANDONNÉ]) dans le titre de ton premier message. Voir ce paragraphe du manuel du site pour davantage d'informations.



Bonne musique à toi ! 😊
France
Merci beaucoup.
C'est fait !
Juste une proposition de simplification et de généralisation de ton script,
- simplification: remplacer le if else par un test direct de lsusb -d
- généralisation: utiliser un paramètre facultatif à l'appel du script
(je n'ai pas "nettoyé" les commentaires mais certaines lignes sont dès lors simplifiables)

Copy to clipboard
#!/bin/bash ### par défaut la carte a un id lsusb de 1397:0509 ### si le script est appelé avec un argument ce dernier deviendra l'id lsub à tester _SNDCARD=${1:-1397:0509} # On lance une boucle pour vérifier si la carte son est lancée while true; do # on teste l'entrée lsusb avec le code hexa du périphérique # remplacez "1397:0509" par le code de votre périphérique usb (carte son, webcam, # imprimante, etc.) que vous trouverez en faisant "lsusb" dans la console # si la carte est branchée et reconnue on sort de la boucle et on continue lsusb -d ${_SNDCARD} && break lsusb -d ${_SNDCARD} 1>/dev/null && break # sinon on demande à l'utilisateur ce qu'il veut faire echo "La carte son n'est pas allumée. Relancer ? (y/n)" : # on capture son entrée clavier read -n1 -s input # on réagit en fonction de son choix case "$input" in # il répond "y" on relance la boucle pour vérifier qu'il a bien allumé la carte "y") continue ;; # il répond non on quitte "n") exit 0 ;; # il a saisi un autre caractère on l'alerte *) echo "Choix non proposé." continue ;; esac done #suite du programme... echo "ça continue..." sleep 5


Exemples d'utilisation sur un de mes bouzins (carte différente) :
Copy to clipboard
sh _usbcardtest2 La carte son n'est pas allumée. Relancer ? (y/n) :

Copy to clipboard
sh _usbcardtest2 1235:800a ça continue...

France
Merci, c'est toujours bien de simplifier.
Voici le code testé et mis à jour.

Copy to clipboard
#*************** # TEST CARTE SON #*************** # On lance une boucle pour vérifier si la carte son est lancée while true; do # on teste l'entrée lsusb avec le code hexa du périphérique # remplacez "1397:0509" par le code de votre périphérique usb (carte son, webcam, # imprimante, etc.) que vous trouverez en faisant "lsusb" dans la console _SNDCARD=${1:-1397:0509} # on teste l'entrée lsusb avec le code hexa du périphérique # si la carte est branchée et reconnue on sort de la boucle et on continue lsusb -d ${_SNDCARD} 0>/dev/null && break # sinon on demande à l'utilisateur ce qu'il veut faire echo "La carte son n'est pas allumée. Relancer ? (y/n)" : # on capture son entrée clavier read -n1 -s input # on réagit en fonction de son choix case "$input" in # il répond "y" on relance la boucle pour vérifier qu'il a bien allumé la carte "y") continue ;; # il répond non on quitte "n") exit 0 ;; # il a saisi un autre caractère on l'alerte *) echo "Choix non proposé." continue ;; esac done