Sous Windows 11, audiodg.exe se relance et perd l’affinité CPU définie. Voici un guide concret pour l’obliger à rester sur un seul cœur : explications, limites, pas‑à‑pas avec Process Lasso, script PowerShell + tâche planifiée, et conseils pour réduire la charge audio.
Problème posé
Vous souhaitez que audiodg.exe (Windows Audio Device Graph Isolation) n’utilise qu’un seul cœur CPU et conserve ce réglage dans le temps. Or, dès qu’il est recréé, le processus revient à son affinité par défaut (tous les cœurs). Le besoin : rendre durable un « 1 cœur » pour audiodg.exe sur Windows 11.
Pourquoi l’affinité se réinitialise
- audiodg.exe est enfant du service Windows Audio : il est recréé à la moindre perturbation (changement de périphérique audio, mise à jour de pilote, redémarrage du service Audio, déconnexion/reconnexion de session, mise en veille/réveil…). À chaque renaissance, il repart avec l’affinité par défaut (tous les cœurs).
- Protection d’intégrité du code : les exécutables système signés ne se patchent plus durablement. Même si vous modifiez l’en‑tête PE (type ImageCFG), Windows rétablit l’original ou refuse l’exécution.
Ce qui a été essayé et constaté
| Méthode | Principe | Résultat constaté |
|---|---|---|
| ImageCFG (outil hérité) | Modifier l’en‑tête PE pour imposer une affinité au lancement | Inopérant sur Windows 10/11 : l’exécutable signé refuse la modification ou est restauré. |
| Process Lasso (tierce partie) | Surveiller le démarrage des processus et réappliquer automatiquement affinité/priorité | Fonctionne, mais requiert un logiciel résident. |
| Gestionnaire des tâches | Clic droit › Définir l’affinité | À refaire après chaque recréation du processus. |
| start /affinity | Lancer un programme avec un masque CPU prédéfini | Non applicable ici : audiodg.exe est lancé par Windows Audio, pas manuellement. |
Conclusion opérationnelle
On ne peut pas figer l’affinité d’audiodg.exe directement dans le binaire ni via le Registre. La stratégie gagnante consiste à réappliquer automatiquement l’affinité dès que le processus réapparaît :
- Solution confortable : Process Lasso.
- Solution native : script PowerShell + Planificateur de tâches (déclenchement au logon et sur création de processus).
Solution recommandée : Process Lasso
Process Lasso est un utilitaire réputé qui surveille les processus et applique automatiquement vos politiques d’affinité et de priorité.
Étapes suggérées
- Lancer Process Lasso et vérifier qu’il s’exécute au démarrage de Windows.
- Attendre qu’
audiodg.exesoit présent (lecture de musique, test de son…). - Dans la liste des processus, clic droit sur audiodg.exe › Affinité CPU › Toujours › Définir l’affinité…, puis cocher uniquement le CPU 0 (ou celui visé).
- Optionnel : régler la Priorité sur Below Normal si vous observez des concurrences CPU.
Avantages : pas de script à maintenir, réapplication quasi instantanée à chaque résurrection d’audiodg.exe. Inconvénient : un service résident supplémentaire.
Solution native : PowerShell + Planificateur de tâches
Cette approche n’ajoute pas de logiciel tiers. L’idée : un script idempotent qui fixe l’affinité, déclenché automatiquement au bon moment.
Script minimal
$mask = 1 # cœur 0
Get-Process audiodg -ErrorAction SilentlyContinue |
ForEach-Object { $_.ProcessorAffinity = [IntPtr]$mask }
Ce script :
- gère toutes les instances d’
audiodg.exeprésentes, - peut être relancé sans risque (idempotent),
- fonctionne avec une latence d’environ 1 seconde après la création du processus (selon le déclencheur).
Script robuste prêt à l’emploi
param(
[UInt64]$Mask = 1 # 0x1 = CPU 0
)
$procs = Get-Process -Name audiodg -ErrorAction SilentlyContinue
if ($null -eq $procs) { return }
foreach ($p in $procs) {
try {
$current = [UInt64]$p.ProcessorAffinity
if ($current -ne $Mask) {
$p.ProcessorAffinity = [IntPtr]$Mask
}
} catch {
# En cas d'échec (droits insuffisants ou timing), on ignore et on réessaiera au prochain déclencheur
}
}
Conseil droits : exécuter la tâche avec les plus hauts privilèges pour pouvoir modifier un processus de service.
Créer la tâche planifiée (GUI)
- Ouvrir Planificateur de tâches › Créer une tâche.
- Général : nommer « Fix audiodg Affinity », cocher Exécuter avec les autorisations les plus élevées.
- Déclencheurs :
- À l’ouverture de session (tout utilisateur).
- Sur un événement : Journal = Sécurité, ID = 4688 (création de processus), puis passer en Filtre personnalisé › XML et coller la requête ci‑dessous.
- Actions : Démarrer un programme :
- Programme/script :
powershell.exe - Ajouter des arguments :
-NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Set-AudiodgAffinity.ps1" -Mask 0x1
- Programme/script :
- Conditions : décocher « Démarrer la tâche uniquement si l’ordinateur est en courant alternatif » si nécessaire.
- Paramètres : cocher « Autoriser l’exécution de la tâche à la demande » et « Exécuter la tâche dès que possible après un démarrage planifié manqué ».
Filtre XML pour l’événement 4688 (Sécurité)
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[EventID=4688]]
and
*[EventData[Data[@Name='NewProcessName'] and (contains(., '\audiodg.exe') or contains(., '/audiodg.exe'))]]
</Select>
</Query>
</QueryList>
Remarque : si vous ne voyez pas d’événements 4688, activez l’audit de création de processus :
auditpol.exe /set /subcategory:"Process Creation" /success:enable
Variante WMI (expert)
Pour une réaction immédiate sans passer par le journal Sécurité, on peut surveiller WMI depuis un script résident (lancé par une tâche « À l’ouverture de session »). Le script reste en mémoire et applique la règle à chaud :
$mask = [UInt64]1 # CPU 0
Register-WmiEvent -Query "SELECT * FROM Win32_ProcessStartTrace WHERE ProcessName='audiodg.exe'" -SourceIdentifier "AudiodgWatch" -Action {
Start-Sleep -Milliseconds 300
try {
$pid = $Event.SourceEventArgs.NewEvent.ProcessID
$p = Get-Process -Id $pid -ErrorAction Stop
$p.ProcessorAffinity = [IntPtr]$mask
} catch { }
}
# Empêche la fermeture du script
Wait-Event
Avantage : quasi instantané. Inconvénient : le script reste résident (mais sans logiciel tiers).
Réduire la charge d’audiodg.exe avant de brider les cœurs
- Désactiver les effets : Paramètres › Système › Son › votre périphérique › Améliorations audio = Désactivé. Dans le Panneau de configuration › Son › Propriétés du périphérique › onglet Améliorations : désactiver.
- Format par défaut : privilégier 44,1 kHz/48 kHz en 16 bits, éviter 96/192 kHz si inutile.
- Pilotes : mettre à jour (ou revenir à une version stable) du pilote audio si des pics CPU sont apparus après une mise à jour.
- Applications d’effets : equalizers, spatialisation, APO tiers peuvent s’injecter dans
audiodg.exeet alourdir le mixage ; tester avec ces modules désactivés/désinstallés.
Choisir le bon cœur : masques d’affinité
Un masque d’affinité est un nombre dont chaque bit correspond à un processeur logique. Pour imposer un seul cœur n, utilisez 2^n. Exemples :
| CPU logique | Masque (décimal) | Masque (hex) |
|---|---|---|
| 0 | 1 | 0x1 |
| 1 | 2 | 0x2 |
| 2 | 4 | 0x4 |
| 3 | 8 | 0x8 |
| 4 | 16 | 0x10 |
| 5 | 32 | 0x20 |
| 6 | 64 | 0x40 |
| 7 | 128 | 0x80 |
| 8 | 256 | 0x100 |
| 9 | 512 | 0x200 |
| 10 | 1 024 | 0x400 |
| 11 | 2 048 | 0x800 |
| 12 | 4 096 | 0x1000 |
| 13 | 8 192 | 0x2000 |
| 14 | 16 384 | 0x4000 |
| 15 | 32 768 | 0x8000 |
Pour plusieurs cœurs, additionnez : ex. CPU 0 + 1 => 0x3, CPU 2 + 3 => 0xC.
Calculer un masque depuis une liste de cœurs
function Get-AffinityMask([int[]]$Cpus) {
$mask = [UInt64]0
foreach ($c in $Cpus) { $mask = $mask -bor (1 -shl $c) }
return $mask
}
Get-AffinityMask -Cpus 0 # 1 (0x1)
Get-AffinityMask -Cpus 3 # 8 (0x8)
Get-AffinityMask -Cpus 0,1 # 3 (0x3)
Hybride P‑cores/E‑cores et Hyper‑Threading
- Sur CPU hybrides (P/E‑cores), vous pouvez cibler un type de cœur en choisissant le bon index logique. Vérifiez l’indexation dans le Gestionnaire des tâches (onglet Performance › CPU › Graphique par processeur logique).
- Avec l’Hyper‑Threading/SMT, les cœurs logiques 0/1 appartiennent souvent au même cœur physique : si vous ne voulez qu’un seul contexte d’exécution, restez sur un unique processeur logique (ex.
0x1). - Sur des machines > 64 processeurs logiques, Windows utilise des groupes de processeurs.
ProcessorAffinityagit dans le groupe courant du processus. Pouraudiodg.exe, se limiter à un cœur du groupe 0 suffit généralement (ex.0x1).
Bonnes pratiques et garde‑fous
- Stabilité d’abord : réduire la charge d’
audiodg.exe(effets, pilotes) avant de le contraindre à un cœur. - Ne pas patcher
C:\Windows\System32\audiodg.exe: bloqué par la protection de fichiers, l’intégrité de code et la signature. - Registre : aucune clé supportée pour forcer l’affinité d’
audiodg.exe. - Diagnostics : suivez l’utilisation CPU d’
audiodg.exependant la lecture audio/vidéo, et testez après chaque changement (désactivation d’un APO, mise à jour pilote…).
Procédure express : mise en place en 5 minutes
- Créer
C:\Scripts\Set-AudiodgAffinity.ps1avec le script robuste ci‑dessus (Mask=0x1). - Planificateur › Créer une tâche : nom « Fix audiodg Affinity », exécuter avec les autorisations les plus élevées.
- Déclencheurs : À l’ouverture de session + Sur événement 4688/Sécurité (filtre XML ci‑dessus).
- Action :
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\Scripts\Set-AudiodgAffinity.ps1" -Mask 0x1 - Valider, tester en redémarrant le service Audio (ou en changeant de périphérique) ; vérifier l’affinité dans le Gestionnaire des tâches.
FAQ
Est‑ce risqué de forcer un seul cœur ?
Pas pour la stabilité de Windows. En revanche, si audiodg.exe doit resampler/mixer beaucoup de flux avec des effets, lui imposer un seul cœur peut créer des goulots d’étranglement. Surveillez la latence audio et adaptez le masque si nécessaire.
Pourquoi l’affinité se perd après chaque redémarrage ?
Parce que audiodg.exe renaît : nouvelle instance, nouvelles propriétés ; Windows repart sur l’affinité par défaut.
Peut‑on tout faire par GPO/Registre ?
Non : il n’existe pas de clé de Registre ni de stratégie intégrée pour fixer l’affinité d’un processus système. Passez par une réapplication (Process Lasso ou tâche planifiée).
Dois‑je choisir un P‑core ou un E‑core ?
Si vous utilisez un CPU hybride, préférez un P‑core pour des charges audio lourdes. Testez et mesurez ; le bon choix dépend de vos autres processus.
Synthèse rapide
- L’affinité « 1 cœur » ne peut pas être figée dans le binaire d’
audiodg.exe. - La voie durable consiste à réappliquer l’affinité :
- automatiquement avec Process Lasso,
- ou avec un script PowerShell déclenché par le Planificateur de tâches (logon + événement 4688).
- Avant de contraindre le CPU, pensez à réduire la charge audio (désactivation des effets, pilotes stables).
Annexe : modèle de script paramétrable
<#
.SYNOPSIS
Fixe l'affinité d'audiodg.exe au masque spécifié.
.PARAMETER Mask
Masque d'affinité (hex ou décimal). 0x1 = CPU 0.
.EXAMPLE
.\Set-AudiodgAffinity.ps1 -Mask 0x1
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$false)]
[UInt64]$Mask = 0x1
)
function Set-AudiodgAffinity([UInt64]$M) {
$procs = Get-Process -Name audiodg -ErrorAction SilentlyContinue
if ($null -eq $procs) { return $false }
$ok = $false
foreach ($p in $procs) {
try {
if ([UInt64]$p.ProcessorAffinity -ne $M) {
$p.ProcessorAffinity = [IntPtr]$M
}
$ok = $true
} catch { }
}
return $ok
}
# petite temporisation en cas de démarrage très récent
Start-Sleep -Milliseconds 300
[void](Set-AudiodgAffinity -M $Mask)
Annexe : contrôle visuel
Pour vérifier rapidement :
- Ouvrir le Gestionnaire des tâches › Détails, clic droit sur
audiodg.exe› Définir l’affinité. - Les cœurs non cochés confirment que la politique est bien appliquée.
En bref : on ne « force » pas audiodg.exe une fois pour toutes ; on automatise la réapplication de son affinité. C’est simple, fiable et réversible.

