Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Controlling Volume Mixer

I want to control other application volume(firefox).

i can do it with Volume Mixer

enter image description here

What is the libraries of the Volume Mixer?

like image 412
user1974519 Avatar asked Jan 13 '13 17:01

user1974519


People also ask

How do I make everything in my volume mixer the same?

There is a simple fix: manually drag all of them to 100% and the drag the master all the way to 0. Drag the master up again. You'll notice they're all in sync now. This happens if you modiy the volumes for programs individually to different levels and you attempt to modify them all use the master slider.

Why does my volume mixer auto adjust?

Volume controls on your Windows 10 PC can change automatically for several reasons. A faulty volume rocker on your headset, third-party app conflict, and an audio driver glitch are the common causes for this problem.

What happened volume mixer?

Along with many other interface changes, Microsoft removed the classic mixer in Windows 11 and replaced it with a unified sound menu. Unfortunately, not everyone is a fan of the change, and you might be looking to restore the classic Volume Mixer in Windows 11.

How do you rebalance a volume mixer?

In your Windows 10 settings, navigate to Sound, and at the bottom of the page, locate "App volume and device preferences" under the Advanced sound options. From that screen, press the reset button to "reset to the Microsoft recommended defaults."


2 Answers

Here is a sample C# Console Application that does it. It's based on the Windows Core Audio Library. It works only on Windows 7 and higher.

using System; using System.Runtime.InteropServices; using System.Collections.Generic;  namespace SetAppVolumne {     class Program     {         static void Main(string[] args)         {             const string app = "Mozilla Firefox";              foreach (string name in EnumerateApplications())             {                 Console.WriteLine("name:" + name);                 if (name == app)                 {                     // display mute state & volume level (% of master)                     Console.WriteLine("Mute:" + GetApplicationMute(app));                     Console.WriteLine("Volume:" + GetApplicationVolume(app));                      // mute the application                     SetApplicationMute(app, true);                      // set the volume to half of master volume (50%)                     SetApplicationVolume(app, 50);                 }             }         }          public static float? GetApplicationVolume(string name)         {             ISimpleAudioVolume volume = GetVolumeObject(name);             if (volume == null)                 return null;              float level;             volume.GetMasterVolume(out level);             return level * 100;         }          public static bool? GetApplicationMute(string name)         {             ISimpleAudioVolume volume = GetVolumeObject(name);             if (volume == null)                 return null;              bool mute;             volume.GetMute(out mute);             return mute;         }          public static void SetApplicationVolume(string name, float level)         {             ISimpleAudioVolume volume = GetVolumeObject(name);             if (volume == null)                 return;              Guid guid = Guid.Empty;             volume.SetMasterVolume(level / 100, ref guid);         }          public static void SetApplicationMute(string name, bool mute)         {             ISimpleAudioVolume volume = GetVolumeObject(name);             if (volume == null)                 return;              Guid guid = Guid.Empty;             volume.SetMute(mute, ref guid);         }          public static IEnumerable<string> EnumerateApplications()         {             // get the speakers (1st render + multimedia) device             IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());             IMMDevice speakers;             deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers);              // activate the session manager. we need the enumerator             Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;             object o;             speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);             IAudioSessionManager2 mgr = (IAudioSessionManager2)o;              // enumerate sessions for on this device             IAudioSessionEnumerator sessionEnumerator;             mgr.GetSessionEnumerator(out sessionEnumerator);             int count;             sessionEnumerator.GetCount(out count);              for (int i = 0; i < count; i++)             {                 IAudioSessionControl ctl;                 sessionEnumerator.GetSession(i, out ctl);                 string dn;                 ctl.GetDisplayName(out dn);                 yield return dn;                 Marshal.ReleaseComObject(ctl);             }             Marshal.ReleaseComObject(sessionEnumerator);             Marshal.ReleaseComObject(mgr);             Marshal.ReleaseComObject(speakers);             Marshal.ReleaseComObject(deviceEnumerator);         }          private static ISimpleAudioVolume GetVolumeObject(string name)         {             // get the speakers (1st render + multimedia) device             IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());             IMMDevice speakers;             deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers);              // activate the session manager. we need the enumerator             Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID;             object o;             speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o);             IAudioSessionManager2 mgr = (IAudioSessionManager2)o;              // enumerate sessions for on this device             IAudioSessionEnumerator sessionEnumerator;             mgr.GetSessionEnumerator(out sessionEnumerator);             int count;             sessionEnumerator.GetCount(out count);              // search for an audio session with the required name             // NOTE: we could also use the process id instead of the app name (with IAudioSessionControl2)             ISimpleAudioVolume volumeControl = null;             for (int i = 0; i < count; i++)             {                 IAudioSessionControl ctl;                 sessionEnumerator.GetSession(i, out ctl);                 string dn;                 ctl.GetDisplayName(out dn);                 if (string.Compare(name, dn, StringComparison.OrdinalIgnoreCase) == 0)                 {                     volumeControl = ctl as ISimpleAudioVolume;                     break;                 }                 Marshal.ReleaseComObject(ctl);             }             Marshal.ReleaseComObject(sessionEnumerator);             Marshal.ReleaseComObject(mgr);             Marshal.ReleaseComObject(speakers);             Marshal.ReleaseComObject(deviceEnumerator);             return volumeControl;         }     }      [ComImport]     [Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")]     internal class MMDeviceEnumerator     {     }      internal enum EDataFlow     {         eRender,         eCapture,         eAll,         EDataFlow_enum_count     }      internal enum ERole     {         eConsole,         eMultimedia,         eCommunications,         ERole_enum_count     }      [Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]     internal interface IMMDeviceEnumerator     {         int NotImpl1();          [PreserveSig]         int GetDefaultAudioEndpoint(EDataFlow dataFlow, ERole role, out IMMDevice ppDevice);          // the rest is not implemented     }      [Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]     internal interface IMMDevice     {         [PreserveSig]         int Activate(ref Guid iid, int dwClsCtx, IntPtr pActivationParams, [MarshalAs(UnmanagedType.IUnknown)] out object ppInterface);          // the rest is not implemented     }      [Guid("77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]     internal interface IAudioSessionManager2     {         int NotImpl1();         int NotImpl2();          [PreserveSig]         int GetSessionEnumerator(out IAudioSessionEnumerator SessionEnum);          // the rest is not implemented     }      [Guid("E2F5BB11-0570-40CA-ACDD-3AA01277DEE8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]     internal interface IAudioSessionEnumerator     {         [PreserveSig]         int GetCount(out int SessionCount);          [PreserveSig]         int GetSession(int SessionCount, out IAudioSessionControl Session);     }      [Guid("F4B1A599-7266-4319-A8CA-E70ACB11E8CD"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]     internal interface IAudioSessionControl     {         int NotImpl1();          [PreserveSig]         int GetDisplayName([MarshalAs(UnmanagedType.LPWStr)] out string pRetVal);          // the rest is not implemented     }      [Guid("87CE5498-68D6-44E5-9215-6DA47EF883D8"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]     internal interface ISimpleAudioVolume     {         [PreserveSig]         int SetMasterVolume(float fLevel, ref Guid EventContext);          [PreserveSig]         int GetMasterVolume(out float pfLevel);          [PreserveSig]         int SetMute(bool bMute, ref Guid EventContext);          [PreserveSig]         int GetMute(out bool pbMute);     } } 

Note: I have not defined the interfaces completely, only what was needed for the code to work.

like image 152
Simon Mourier Avatar answered Sep 24 '22 02:09

Simon Mourier


I know this is too late, but I needed this lately, I tried Simon's answer and couldn't get it to work, tried ElektroStudios's comment and Simon's other answer and still nothing, I don't know what I did wrong but I gave up on it.

I later found this asnwer and got it to work using CSCore

private static void Main(string[] args) {     using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))     {         using (var sessionEnumerator = sessionManager.GetSessionEnumerator())         {             foreach (var session in sessionEnumerator)             {                 using (var simpleVolume = session.QueryInterface<SimpleAudioVolume>())                 using (var sessionControl = session.QueryInterface<AudioSessionControl2>())                 {                     if (sessionControl.ProcessID == 2436)                         simpleVolume.MasterVolume = 0.5f;                 }             }         }     }      Console.ReadKey(); }  private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow) {     using (var enumerator = new MMDeviceEnumerator())     {         using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))         {             Debug.WriteLine("DefaultDevice: " + device.FriendlyName);             var sessionManager = AudioSessionManager2.FromMMDevice(device);             return sessionManager;         }     } } 
like image 43
Elfor Avatar answered Sep 22 '22 02:09

Elfor