Change Windows sound volume via the command line

142,092

Solution 1

NirCmd is an application that does that and more.

Example of use:

  • Increase the system volume by 2000 units (out of 65535)
    nircmd.exe changesysvolume 2000
  • Decrease the system volume by 5000 units (out of 65535)
    nircmd.exe changesysvolume -5000
  • Set the volume to the highest value
    nircmd.exe setsysvolume 65535
  • Mute
    nircmd.exe mutesysvolume 1
  • Unmute
    nircmd.exe mutesysvolume 0

Solution 2

Having read these posts and having looked for alternatives I decided to write my own command line utility, called SetVol, to set the volume. It works a little more simply than what is described in some of the other posts on this page, here are some examples that you would enter at the command prompt:

setvol 75
setvol -10
setvol +12
setvol mute
setvol unmute

There are other options too. I've released it as freeware, and you are welcome to visit www.rlatour.com/setvol for more information and to download a copy.

Enjoy

Solution 3

Make the JavaScript files:

echo var oShell = new ActiveXObject("WScript.Shell"); >> volup.js<BR>
echo oShell.SendKeys(String.fromCharCode(0xAF)); >> volup.js

echo var oShell = new ActiveXObject("WScript.Shell"); >> voldown.js<BR>
echo oShell.SendKeys(String.fromCharCode(0xAE)); >> voldown.js

echo var oShell = new ActiveXObject("WScript.Shell"); >> togglemute.js<BR>
echo oShell.SendKeys(String.fromCharCode(0xAD)); >> togglemute.js

Show the volume control, so you can see what you're doing:

sndvol
(or maybe sndvol32)

Change the volume:

cscript voldown.js

Note: I've had this approach work reliably on machines that I've attempted to use it on. Helen's answer to Sibo Lin's StackOverflow question about this indicates muting isn't reliable, but volume-changing may not be quite as reliable. I suspect that the level of reliability may be different on different machines. This approach is using the technology of mimicking a keystroke, and specifically a volume control key on an enhanced media keyboard. At the time that Windows started supporting this, such a keyboard was basically a little-used frivolous feature that offered functionality that was previously available only with custom drivers. It wouldn't surprise me if this code was less polished, and less likely to work on some of the various (perhaps older) hardware that's out there. All that said, I haven't had troubles with it myself.

Credits:

One caveat: This question has been tagged with Windows XP. I just tried this in Windows 10. I know I've used this in Windows 7 (at least enough to test it out). As I first started to see Microsoft's built-in support for these enhanced keyboards around the time of Windows ME, I would think this is likely to work well win WinXP too. I don't recall if I actually tested this with that operating system. Still, if this approach doesn't work well, I don't expect it to cause problematic side effects.

Solution 4

Here's an awesome powershell script found here: (Tested on Windows 10 and 8.1 x64)

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)); }
   }
}
'@

Now to set volume:

[audio]::Volume = 0.4  # 40%
[audio]::Volume = 0.78 # 78%

And to (un)mute:

[audio]::Mute = $true  # Mute
[audio]::Mute = $false # Unmute
Share:
142,092

Related videos on Youtube

saf21
Author by

saf21

Updated on September 17, 2022

Comments

  • saf21
    saf21 over 1 year

    Is it possible to change the volume in Windows XP via the command line?

    • Admin
      Admin over 14 years
      AutoHotkey can do this, which you could compile and call from the command line
    • Admin
      Admin almost 5 years
      Needing a third party tool to set volume. I'm totally affraid.
  • saf21
    saf21 over 14 years
    Was hoping there was a standard Windows method, but this looks very handy. Will accept this if no-one supplies one in the next day or two. Thanks, Harry.
  • John Talman
    John Talman over 14 years
    NirCmd looks very cool and very handy. Thanks for the tip.
  • RomanSt
    RomanSt over 14 years
    NirCmd is also great for getting a laptop to mute on every logon - this way it won't accidentally keep making the "ding" sound on the train (which I don't notice because of the headphones until an embarrassing moment when someone gets annoyed enough to point it out.....)
  • HikeMike
    HikeMike over 13 years
    This apparently also works on Windows 7, as a few now deleted non-answers pointed out earlier.
  • Admin
    Admin almost 9 years
    There's user-friendly interactive script I made for simplification that depends on nircmd.
  • ArtOfWarfare
    ArtOfWarfare about 7 years
    Thanks for sharing those keycodes! Since my computer already has python installed, I was able to use this on the command line: pip install SendKeys (pure Python package for emulating keystrokes), followed by python -c "from SendKeys import playkeys; playkeys([(0xAE, True), (0xAE, False)])", which emulates a single press and release of the volume key. To emulate 100 distinct presses (for example), you can insert * 100 after the closing ] and before the final ).
  • cssyphus
    cssyphus over 5 years
    This is brilliant. Thanks very much for this tool !
  • Stefan Reich
    Stefan Reich over 5 years
    Thanks!! However, I REALLY need this for setting the mic volume. (I'm using Java but I don't expect JavaSound to do this.) Can it be added?
  • ashleedawg
    ashleedawg over 5 years
    Awesome, thank you! Feature Request for future: ability to return current volume level as an errorlevel (so I can save current setting to later restore it)
  • Rob
    Rob over 5 years
    Sure, I can do that - and in fact, just did! The program has been updated to version 1.2 on the website, you may need to refresh your browser to see the changes. There is now a new parm 'report' that should give you what you want. Help on the website and in the app explains it use. Merry Christmas!
  • Rob
    Rob over 5 years
    (that it say return the current volume level as per ashleedawg's suggestion)
  • sysarchitek
    sysarchitek over 4 years
    Thanks Rob for the utility and helping the community. It is just missing one important feature for me which is to control the Alert "Application" speaker. For some reasons, it is reseted on loud after logging in and I just want to quite this one.
  • Toughy
    Toughy over 3 years
    The volup.js scrip never worked on my Windows 10. I suspect String.fromCharCode() does something weird about Unicode translation, and String.fromCodePoint() is not available in Windows Script host. It worked nicely when I wrote the same thing in VBScript instead of JScript
  • Mister SirCode
    Mister SirCode over 2 years
    @user373230 page not found