Windows 10 tiene funciones muy buenas vinculadas a todos los temas del ordenador. Sobre el audio, incorpora varios perfiles según el dispositivo que esté conectado. Lo habitual es que se personalice el uso de cada dispositivo en función del volumen, para subir o bajarlo en determinada situación.

Si lo que quieres es silenciar automáticamente algún auricular cuando sea desconectado, podrías crear y ejecutar un script. Pero si no sabes absolutamente nada de programación no debes preocuparte, más abajo tendrás el código exacto que contendrá ese pequeño programa que configurarás en tu ordenador.

En resumidas palabras, lo que estarías haciendo es evitar que se siga escuchando la canción o cualquier audio reproducido cuando quitas los audífonos, algo que ya ocurre en la mayoría de los smartphones actualmente.

Código para el script que ‘mutea’ el audio en Windows 10

El script permitirá apagar el audio al ‘entender’ que ya no queremos seguir escuchándolo por haber desconectado los auriculares, aunque por accidente lo hagamos.

Paso 1: Lo primero que tienes que hacer es abrir un bloc de notas o NotePad.

Paso 2: Copiar y pegar el siguiente código en el archivo recién abierto:

[cmdletbinding()]

Param()

#Adding definitions for accessing the Audio API

Add-Type -TypeDefinition @’

using System.Runtime.InteropServices;

[Guid(“5CDF2C82-841E-4546-9722-0CF74078229A”), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

interface IAudioEndpointVolume {

// f(), g(), … are unused COM method slots. Define these if you care

int f(); int g(); int h(); int i();

int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext);

int j();

int GetMasterVolumeLevelScalar(out float pfLevel);

int k(); int l(); int m(); int n();

int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext);

int GetMute(out bool pbMute);

}

[Guid(“D666063F-1587-4E43-81F1-B948E807363F”), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

interface IMMDevice {

int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev);

}

[Guid(“A95664D2-9614-4F35-A746-DE8DB63617E6”), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]

interface IMMDeviceEnumerator {

int f(); // Unused

int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint);

}

[ComImport, Guid(“BCDE0395-E52F-467C-8E3D-C4579291692E”)] class MMDeviceEnumeratorComObject { }

public class Audio {

static IAudioEndpointVolume Vol() {

var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;

IMMDevice dev = null;

Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(/*eRender*/ 0, /*eMultimedia*/ 1, out dev));

IAudioEndpointVolume epv = null;

var epvid = typeof(IAudioEndpointVolume).GUID;

Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, /*CLSCTX_ALL*/ 23, 0, out epv));

return epv;

}

public static float Volume {

get {float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v;}

set {Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty));}

}

public static bool Mute {

get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; }

set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }

}

}

‘@ -Verbose

While($true)

{

#Clean all events in the current session since its in a infinite loop, to make a fresh start when loop begins

Get-Event | Remove-Event -ErrorAction SilentlyContinue

#Registering the Event and Waiting for event to be triggered

Register-WmiEvent -Class Win32_DeviceChangeEvent

Wait-Event -OutVariable Event |Out-Null

$EventType = $Event.sourceargs.newevent | `

Sort-Object TIME_CREATED -Descending | `

Select-Object EventType -ExpandProperty EventType -First 1

#Conditional logic to handle, When to Mute/unMute the machine using Audio API

If($EventType -eq 3)

{

[Audio]::Mute = $true

Write-Verbose “Muted [$((Get-Date).tostring())]”

}

elseif($EventType -eq 2 -and [Audio]::Mute -eq $true)

{

[Audio]::Mute = $false

Write-Verbose “UnMuted [$((Get-Date).tostring())]”

}

}

Paso 3: Guardarlo con el formato PS1. Selecciona antes “Todos los archivos” en el “Tipo” y listo.

Ejecuta el script

Puedes abrir el script manualmente, pero lo ideal es que PowerShell pueda ejecutarlo automáticamente cada vez que el conector de los auriculares salga del computador.

Lo que debes hacer para crear esa regla es lo siguiente:

Paso 1:  Copia y pega en un bloc de notas o NotePad el siguiente código:

@ECHO OFF

PowerShell.exe -Command “Path to script”

PAUSE

Paso 2: En “Path to script”, deberás colocar la ruta del script antes creados.

Paso 3: Guarda el archivo con la extensión .bat.