--alsathings : Cartes son par Alsa

Ce module expose comme des « trucs » les cartes son, en utilisant pour cela la bibliothèque python alsaaudio. L'état est vérifié à chaque seconde, et les cartes sons supplémentaires (par exemples celles d'enceintes USB) sont ajoutées ou retirées dynamiquement.

Chaque carte son est exposée avec le chemin « audioX », où X est le numéro de la carte. Elles présentent les clefs « name » (nom interne de la carte), « mixer » (mixeur par défaut, généralement « Master »), et « volume » (volume actuel, en pourcentage), et peut éventuellement présenter l'état « muted » quand la sortie sonore est désactivée logiciellement. Chaque truc carte présente ensuite un enfant par mixeur disponible, dont le chemin est de la forme « audioX/NomDuMixeur », qui fonctionne de la même manière, mais n'a pas de nom spécifique.

Une carte son ou l'un de ses mixeurs répondent, dans la mesure du possible, aux requêtes « mute », « unmute », « toggle », « volume:up » (ou « up » tout court) et « volume:down » (ou « down » tout court), ainsi qu'à la requête paramétrée « volume:X », où X est un entier entre 0 et 100. L'état actuel est pris en compte, c'est-à-dire que par exemple le test « :can(up) » renverra faux sur un mixeur qui est déjà à fond.

Les cartes son, comme leur mixeurs, ont une icône par défaut représentant un haut-parleur ou un micro (selon si le mixeur sert à l'émission ou à l'enregistrement, cette distinction se basant uniquement sur son nom pour l'instant) plus ou moins rempli en fonction du volume actuel, avec un symbole surajouté pour l'état « muted ». Une requête « reicon:X » permet de lui associer une image en particulier qui sera affichée en plus.

Si, au démarrage du module, la première carte (audio0) possède un mixeur nommé « Headphone », le module tente de vérifier (en lisant dans /proc initialement, puis en suivant les événements ACPI) si quelque chose est branché ou non sur la sortie Jack. Lorsque c'est le cas, l'état « plugged » est ajouté sur la carte son et sur le mixeur correspondant (donc, « audio0/Headphone »).

--sfmlthings : Manettes par SFML

Ce module expose comme des « trucs » les manettes détectées par SFML, et permet ainsi de suivre leurs événements. Les chemins utilisés sont de la forme « joypadX », où X est le numéro attribué à la manette par SFML. Outre les clefs de base d'une manette, elle propose une clef « type » renvoyant une chaîne de caractère indiquant de quel type de manette il s'agit (SFML fournit également deux entiers pour l'identification de la manette, mais je n'ai pas trouvé de doc expliquant à quoi ils correspondent). Les manettes ont par défaut l'icône « joystick » présente dans le thème, mais une requête « reicon:X » permet de leur en attribuer une autre.

Note : SFML présente le très léger désagrément de nécessiter de créer une fenêtre, qui est directement exposée, pour pouvoir recevoir les événements. Même si je la masque aussitôt, le focus de la fenêtre active peut donc être perdu une microseconde lorsque la boucle principale SFML est lancée. Ça ne gêne pas vraiment, mais c'est quand même plus agréable quand c'est fait une seule fois au début de la session plutôt que par chaque programme voulant écouter les manettes, ce qui est une des raisons du choix de n'avoir pas fait gérer les manettes directement par la bibliothèque principale.