Speaker

@echo off
title Activate Speakers (Unmute + 80% Volume)
:: Uses built-in PowerShell + CoreAudio COM to unmute and set master volume

powershell -NoProfile -NonInteractive -Command ^
  "$sig = @'
  using System;
  using System.Runtime.InteropServices;

  [Guid(\"5CDF2C82-841E-4546-9722-0CF74078229A\")]
  interface IAudioEndpointVolume {
    int RegisterControlChangeNotify(IntPtr pNotify);
    int UnregisterControlChangeNotify(IntPtr pNotify);
    int GetChannelCount(out uint pnChannelCount);
    int SetMasterVolumeLevel(float fLevelDB, Guid pguidEventContext);
    int SetMasterVolumeLevelScalar(float fLevel, Guid pguidEventContext);
    int GetMasterVolumeLevel(out float pfLevelDB);
    int GetMasterVolumeLevelScalar(out float pfLevel);
    int SetChannelVolumeLevel(uint nChannel, float fLevelDB, Guid pguidEventContext);
    int SetChannelVolumeLevelScalar(uint nChannel, float fLevel, Guid pguidEventContext);
    int GetChannelVolumeLevel(uint nChannel, out float pfLevelDB);
    int GetChannelVolumeLevelScalar(uint nChannel, out float pfLevel);
    int SetMute(bool bMute, Guid pguidEventContext);
    int GetMute(out bool pbMute);
    int GetVolumeStepInfo(out uint pnStep, out uint pnStepCount);
    int VolumeStepUp(Guid pguidEventContext);
    int VolumeStepDown(Guid pguidEventContext);
    int QueryHardwareSupport(out uint pdwHardwareSupportMask);
    int GetVolumeRange(out float pflVolumeMindB, out float pflVolumeMaxdB, out float pflVolumeIncrementdB);
  }

  [ComImport, Guid(\"1CB9AD4C-DBFA-4C32-B178-C2F568A703B2\")]
  class MMDeviceEnumerator { }

  enum EDataFlow { eRender, eCapture, eAll }
  enum ERole { eConsole, eMultimedia, eCommunications }

  [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid(\"A95664D2-9614-4F35-A746-DE8DB63617E6\")]
  interface IMMDeviceEnumerator {
      int NotImpl1();
      int GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role, out IMMDevice ppDevice);
  }

  [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid(\"D666063F-1587-4E43-81F1-B948E807363F\")]
  interface IMMDevice {
      int Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, out IAudioEndpointVolume ppInterface);
  }
'@;

  Add-Type -Namespace CoreAudio -Name Audio -MemberDefinition $sig;

  $enum = New-Object CoreAudio.MMDeviceEnumerator
  $dev  = $null
  $null = ([CoreAudio.IMMDeviceEnumerator]$enum).GetDefaultAudioEndpoint([int]0,[int]0,[ref]$dev)

  $iid  = [Guid]::Parse('5CDF2C82-841E-4546-9722-0CF74078229A')
  $vol  = $null
  $CLSCTX_INPROC_SERVER = 1
  $null = $dev.Activate([ref]$iid, $CLSCTX_INPROC_SERVER, [IntPtr]::Zero, [ref]$vol)

  # Unmute + set to 80%
  $vol.SetMute($false, [Guid]::Empty)    | Out-Null
  $vol.SetMasterVolumeLevelScalar(0.8, [Guid]::Empty) | Out-Null
"

echo.
echo ✅ Speakers unmuted and volume set to 80%%.
echo.
pause