Saltar al contenido

¿Cambiar el nivel de audio de powershell?

Después de tanto trabajar ya dimos con el arreglo de este atasco que tantos lectores de este espacio han presentado. Si quieres aportar alguna información no dudes en compartir tu conocimiento.

Solución:

SendKeys dejó de funcionar para mí en Windows 10 (literalmente escribe dígitos donde está mi signo de intercalación). Encontré esta publicación de blog con una forma muy conveniente de hacerlo.

Primero, ejecute esto para obtener acceso a la API de audio:

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)); 
    

'@

Luego controla el volumen de esta manera:

::Volume  = 0.2 # 0.2 = 20%, etc.

Y silenciar/activar así:

::Mute = $true  # Set to $false to un-mute

Creé un cmdlet para manipular dispositivos de audio.

http://www.automatedops.com/projects/windowsaudiodevice-powershell-cmdlet/

Incluso incluye una pantalla de valor máximo en vivo.

ingrese la descripción de la imagen aquí

Podemos Silenciar, Bajar Volumen, Subir Volumen los niveles de los altavoces con estos comandos. Un simple 1..50 Se puede agregar un bucle (cada contador = 2 % del volumen) para crear una función que acepte entradas y ajuste el volumen sin necesidad de C#.

Silencio de volumen

$obj = new-object -com wscript.shell
$obj.SendKeys([char]173)

Botón para bajar el volumen

$obj = new-object -com wscript.shell
$obj.SendKeys([char]174)

Botón para subir el volumen

$obj = new-object -com wscript.shell
$obj.SendKeys([char]175)

Encuentre información relevante aquí.

¿Cómo puedo silenciar/activar mi sonido desde PowerShell?

http://blogs.technet.com/b/heyscriptingguy/archive/2013/07/28/weekend-scripter-cheesy-script-to-set-speaker-volume.aspx

EDITAR: Aquí hay una función reutilizable, probada y funcionando en W7x64 con Powershell v2.

Function Set-Speaker($Volume)$wshShell = new-object -com wscript.shell;1..50 
#

Ejemplo de uso. Recuerda que cada tick es 2%

#Sets volume to 60%
Set-Speaker -Volume 30

#Sets volume to 80%
Set-Speaker -Volume 40

#Sets volume to 100%
Set-Speaker -Volume 50

y esta función alternará-silencio

Function Toggle-Mute()$wshShell = new-object -com wscript.shell;$wshShell.SendKeys([char]173)
#

Sección de Reseñas y Valoraciones

Si piensas que te ha sido de utilidad este post, sería de mucha ayuda si lo compartieras con otros juniors de esta manera nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *