KORSiRO
Ancien staff
Salut à tous !
Après quelques temps d'absence sur le forum je reviens vous faire un petit tuto sympa pour modifier votre Boot Sound sur Windows 11 sans toucher au DLL (imageres.dll.mun)
La subtilité de ce tuto et de ce script, c'est qu'il modifie automatiquement le volume général du Boot.
Vous devez être inscrit pour voir les médias
Comme vous pouvez le voir en fin de vidéo, le son remonte automatiquement à la valeur par défaut précédente (de la précédente extinction)
Exemple concret : Si vous avez éteint votre PC avec un volume général de 80% au prochain boot le son sera toujours de 80% on est d'accord ?
Avec mon script, le volume du boot pourra être défini (10%-20%-30% etc...) pour avoir toujours le même level et une fois l'audio du boot lu, le son revient à la valeur enregistré (à la précédente extinction du PC)
Ce qui permet d’allumer votre PC la nuit sans réveiller toute la maison

Commençons !
1. Création du dossier :
à la racine de votre lecteur Windows C: créez le dossier BootSound
2. Script PS1 :
Créez un nouveau fichier texte avec Notepad++ par exemple dans le dossier BootSound, y copier le code si dessous et renommer le fichier + extension en play_theme.ps1
Code:
# Stranger Things - Play theme with fixed volume then restore (no log)
$ErrorActionPreference = "Stop"
# Wait for Windows Audio service
$deadline = (Get-Date).AddSeconds(30)
do {
$svc = Get-Service -Name "AudioSrv" -ErrorAction SilentlyContinue
Start-Sleep -Milliseconds 300
} until (($svc -and $svc.Status -eq "Running") -or (Get-Date) -gt $deadline)
# Small delay for USB audio devices
Start-Sleep -Milliseconds 700
# CoreAudio COM interop (fixed)
Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;
namespace CoreAudioUSB2 {
[ComImport]
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IAudioEndpointVolume {
int RegisterControlChangeNotify(IntPtr pNotify);
int UnregisterControlChangeNotify(IntPtr pNotify);
int GetChannelCount(out uint pnChannelCount);
int SetMasterVolumeLevel(float fLevelDB, ref Guid pguidEventContext);
int SetMasterVolumeLevelScalar(float fLevel, ref Guid pguidEventContext);
int GetMasterVolumeLevel(out float pfLevelDB);
int GetMasterVolumeLevelScalar(out float pfLevel);
int SetChannelVolumeLevel(uint nChannel, float fLevelDB, ref Guid pguidEventContext);
int SetChannelVolumeLevelScalar(uint nChannel, float fLevel, ref Guid pguidEventContext);
int GetChannelVolumeLevel(uint nChannel, out float pfLevelDB);
int GetChannelVolumeLevelScalar(uint nChannel, out float pfLevel);
int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, ref Guid pguidEventContext);
int GetMute(out bool pbMute);
int GetVolumeStepInfo(out uint pnStep, out uint pnStepCount);
int VolumeStepUp(ref Guid pguidEventContext);
int VolumeStepDown(ref Guid pguidEventContext);
int QueryHardwareSupport(out uint pdwHardwareSupportMask);
int GetVolumeRange(out float pflVolumeMindB, out float pflVolumeMaxdB, out float pflVolumeIncrementdB);
}
[ComImport]
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceEnumerator {
int NotImpl1();
int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice dev);
}
[ComImport]
[Guid("D666063F-1587-4E43-81F1-B948E807363F")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDevice {
int Activate(ref Guid iid, int clsctx, IntPtr act, [MarshalAs(UnmanagedType.Interface)] out object obj);
}
public static class VolumeCtl {
static IAudioEndpointVolume GetVol(int role) {
var t = Type.GetTypeFromCLSID(new Guid("BCDE0395-E52F-467C-8E3D-C4579291692E"));
var e = (IMMDeviceEnumerator)Activator.CreateInstance(t);
IMMDevice d; e.GetDefaultAudioEndpoint(0, role, out d); // eRender
object o;
Guid iid = typeof(IAudioEndpointVolume).GUID;
d.Activate(ref iid, 23, IntPtr.Zero, out o); // CLSCTX_ALL=23
return (IAudioEndpointVolume)o;
}
public static float Get(int role) {
float v;
GetVol(role).GetMasterVolumeLevelScalar(out v);
return v;
}
public static void Set(int role, float v) {
if (v < 0f) v = 0f;
if (v > 1f) v = 1f;
Guid g = Guid.Empty;
GetVol(role).SetMasterVolumeLevelScalar(v, ref g);
}
public static void SetAll(float v) { Set(0,v); Set(1,v); Set(2,v); }
}
}
"@
# Save current volumes (Console/Multimedia/Comms)
$old0 = [CoreAudioUSB2.VolumeCtl]::Get(0)
$old1 = [CoreAudioUSB2.VolumeCtl]::Get(1)
$old2 = [CoreAudioUSB2.VolumeCtl]::Get(2)
# Force volume here
$target = 0.12 # change to 0.10 / 0.15 / 0.20 if you want
[CoreAudioUSB2.VolumeCtl]::SetAll($target)
Start-Sleep -Milliseconds 200
# Play the WAV
(New-Object Media.SoundPlayer "C:\BootSound\stranger_theme.wav").PlaySync()
# Restore original volumes
[CoreAudioUSB2.VolumeCtl]::Set(0, $old0)
[CoreAudioUSB2.VolumeCtl]::Set(1, $old1)
[CoreAudioUSB2.VolumeCtl]::Set(2, $old2)
3. Script VBS :
Créez un nouveau fichier texte avec Notepad++ par exemple dans le dossier BootSound, y copier le code si dessous et renommer le fichier + extension en run_hidden.vbs
Ce script permet de cacher le fênetre PowerShell qui lance le script play_theme.ps1 afin d'éviter quelle ne s'affiche au boot
Code:
CreateObject("WScript.Shell").Run "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -ExecutionPolicy Bypass -File ""C:\BootSound\play_theme.ps1""", 0
4. L'audio .wav :
J'ai joint à l'article le fichier que j'utilise (Stranger Things) mais vous pouvez utiliser votre propre fichier mais toujours en .WAV
Choisissez un fichier entre 5 et 15 secondes maximum. Vous pouvez aussi le faire à partir d'une musique (personnellement j'ai utilisé Audacity)
Si vous n'utilisez pas le même audio et donc pas le même nom de fichier il vous faudra modifier le code de play_theme.ps1
A la fin du code vous avez la ligne "(New-Object Media.SoundPlayer "C:\BootSound\stranger_theme.wav"). PlaySync()"
Modifiez "stranger_theme.wav" par le nom de votre fichier audio
5. Réglages du volume :
Dans le même fichier "play_theme.ps1" à la fin du code vous avez la ligne "$target = 0.12" c'est elle qui vous permet de régler le volume au boot qui sera pris en compte pour lire votre son .wav
0.12 correspond à 12% donc à vous de régler en fonction de cette échelle
Pour résumer vous devriez donc avoir un dossier BootSound avec à l'intérieur 3 fichiers :
- play_theme.ps1
- run_hidden.vbs
- ......wav
6. Planificateur de tâches :
- Lancez le "Planificateur de tâches" Windows > Créer une tâche (pas une tâche de base)
- Onglet "Général" :
Nom > donnez un nom à votre tâche (ex : sound boot)
Cochez "N'exécuter que si l'utilisateur est connecté" & "Exécuter avec les autorisations maximales"
- Onglet "Déclancheurs" :
Lancer la tâche " A l'ouverture de session"
Tout utilisateur
- Onglet "Actions" :
Action > "Démarrer un programme"
Programme/Script > wscript.exe
Ajouter des arguments > "C:\BootSound\run_hidden.vbs"
Commencer dans > C:\BootSound
- Onglet "Conditions" :
Décochez tout
- Onglet "Paramètres" :
Cochez uniquement "Autotiser l'exécution de la tâche à la demande" & "Si la tâche en cours ne se termine pas sur demande, forcer son arrêt"
Voilà les amis tout est configuré ! Profitez-en !