Détection automatique de connexion de périphériques audio : quand ça ne fonctionne pas
J'ai changé de carte mère il y a quelques temps. Étant la majorité du temps sous Linux, je n'ai découvert et je ne me suis concentré que tardivement à un petit problème audio. Vous aurez remarqué des changement en particulier depuis Windows 7 au niveau de la gestion des périphériques audio. En effet, il y a désormais un mécanisme qui détecte les événements de connexion ou de déconnexion des entrées/sorties audio. Or, qu'arrive-t-il lorsque le mécanisme de détection ne fonctionne plus? Plus moyen d'utiliser l'entrée ou la sortie, Windows refusant d'y lire ou d'y envoyer quoique ce soit. Pourtant, ces mêmes connexions audio fonctionnent parfaitement sous Linux, donc ils sont toujours physiquement fonctionnels.
On peut toujours acheter une nouvelle carte vidéo, mais à quoi bon si ce n'est qu'une question de détection? Autres options : réaffecter une entrée ou une sortie vers une autre fonction ou désactiver le mécanisme de détection de connexion / déconnexion. En fonction des cartes audio et de leur chipset, la solution n'est pas exactement identique, mais le principe reste le même quand vient le temps de jouer dans le registre.
Je vous présente ci-bas comment réaliser les deux options. Pour ma part, puisque je passe de Linux à Windows et vice-versa et puisque mon connecteur était toujours en mesure de jouer de l'audio, je trouvais plus simple de demander à Windows de désactiver la fonction de détection.
Désactivation du processus de détection de connexion/déconnexion
En somme, ça se fait en 4 étapes
- Lancer l'Éditeur de registre comme administrateur : commande Regedit
- Se rendre à la clé de registre qui concerne les périphériques audio (class=MEDIA) : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}\
- Déterminer le périphérique audio concerné. Chaque périphérique est identifié par une clé qui ressemble à 0000, 0001, 0002, etc. Pour chaque clé, vous trouverez une valeur "DriverDesc" qui vous indiquera si c'est le périphérique désiré. Il se peut que vous ayiez plus d'un périphérique avec la même description (plusieurs sorties audio HDMI sur une carte vidéo par exemple ou un périphérique à l'arrière de l'ordinateur et un à l'avant).
- Ouvrir les sous-clés du périphérique et sélectionner celle qui se nomme "GlobalSettings". Vous y trouverez une valeur qui se nomme "EnableDynamicDevices". Cette clé contrôle l'activation du mécanisme de détection de connexion/déconnexion. Il suffit de changer sa valeur à "0" pour désactiver le mécanisme et forcer à ce que le signal audio soit toujours en fonction (lecture ou envoi).
- Redémarrer le système.
Dans le pire des cas, vous n'aurez pas sélectionné le bon périphérique, vous n'aurez qu'à remettre la valeur à "1" et à tester avec un autre périphérique.
Réaffectation d'une entrée/sortie à une autre fonction
Ici, les 3 premières étapes de l'option précédente sont exactement les mêmes. Cependant, en fonction de votre chipset audio, les clés et valeurs de registre à modifier changent qu'il s'agisse du pilote de Microsoft, de Realtek, d'Intel, etc. Il faut également savoir que ce ne sont pas tous les chipsets qui supportent la réaffectation.
Realtek
Selon la version des pilotes de Realtek, il se peut que l'application de gestion audio offre elle-même la réaffectation audio. Cela n'empêche en rien le fait que vous puissiez faire le travail à partir du registre de Windows. En suivant les 3 premières étapes de l'option précédente, cherchez une clé dans le "DriverDesc" mentionne "Realtek" ou "Realtek HD". Ouvrez les sous-clés et sélectionnez Settings/DrvYYYY_DevType_YYYY_SSYYYYYYYY (ou Y correspond à une valeur numérique propre au périphérique).
Sous cette clé, vérifiez si des valeurs se nommant PinXX existent. Au besoin, vous devrez les ajouter selon l'information qui suit. Ce sont ces valeurs qui contrôlent les fonctions et qui permettent le réacheminement. Selon l'information trouvée et testée du site reaper-x.com, voici comment associer des fonctions aux entrées / sorties :
The Old Pin Numbers (just in case it’s needed somehow)
"Pin00" = Front speakers (rear green)
"Pin01" = Rear speakers (rear black)
"Pin02" = Center / Sub-woofer (rear orange)
"Pin03" = Side speakers (rear gray)
"Pin04" = Mic-in (rear pink)
"Pin05" = Front Mic-In (front pink)
"Pin06" = Line-in (rear blue)
"Pin07" = Front Headphone (front green)
The New Pin Numbers
"Pin10" = Line-in (rear blue)
"Pin11" = Mic-in (rear pink)
"Pin14" = Front speakers (rear green)
"Pin15" = Rear speakers (rear black)
"Pin16" = Center / Sub-woofer (rear orange)
"Pin17" = Side speakers (rear gray)
"Pin19" = Front Mic-In (front pink)
"Pin1b" = Front Headphone (front green)
Binary Values
"00 00 00 00" = Line-in
"01 00 00 00" = Mic-in
"02 00 00 00" = Headphones
“03 00 00 00″ = Front speakers 2nd Output
"04 00 00 00" = Front speakers
"05 00 00 00" = Rear speakers
"06 00 00 00" = Center / sub-woofer
"07 00 00 00" = Side speakers
Je ne peux fournir l'information pour tous les chipsets, mais Google peut vous aider à cette fin. Cherchez "Windows audio retasking chipsetName" en modifiant le nom du chipset (Intel, Realtek, Microsoft...) et vous devriez trouver.
Sachez également que les mêmes mécanismes existent sous Linux. Il vous suffira de chercher "Linux audio retasking" ou "Linux audio jack detection" pour vous lancer vers une solution ou un utilitaire.