public static void SetApplicationVolume(int pid, float level) { ISimpleAudioVolume volume = GetVolumeObject(pid); if (volume == null) { return; } Guid guid = Guid.Empty; volume.SetMasterVolume(level / 100, ref guid); Marshal.ReleaseComObject(volume); }
private static ISimpleAudioVolume GetVolumeObject(int pid) { IMMDeviceEnumerator iMMDeviceEnumerator = null; IAudioSessionEnumerator SessionEnum = null; IAudioSessionManager2 audioSessionManager = null; IMMDevice ppDevice = null; try { iMMDeviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); iMMDeviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out ppDevice); Guid iid = typeof(IAudioSessionManager2).GUID; ppDevice.Activate(ref iid, 0, IntPtr.Zero, out object ppInterface); audioSessionManager = (IAudioSessionManager2)ppInterface; audioSessionManager.GetSessionEnumerator(out SessionEnum); SessionEnum.GetCount(out int SessionCount); ISimpleAudioVolume result = null; for (int i = 0; i < SessionCount; i++) { IAudioSessionControl2 Session = null; SessionEnum.GetSession(i, out Session); Session.GetProcessId(out int pRetVal); if (pRetVal == pid) { result = (Session as ISimpleAudioVolume); break; } } return(result); } finally { if (SessionEnum != null) { Marshal.ReleaseComObject(SessionEnum); } if (audioSessionManager != null) { Marshal.ReleaseComObject(audioSessionManager); } if (ppDevice != null) { Marshal.ReleaseComObject(ppDevice); } if (iMMDeviceEnumerator != null) { Marshal.ReleaseComObject(iMMDeviceEnumerator); } } }
public static void SetApplicationMute(int pid, bool mute) { ISimpleAudioVolume volume = GetVolumeObject(pid); if (volume == null) { return; } Guid guid = Guid.Empty; volume.SetMute(mute, ref guid); Marshal.ReleaseComObject(volume); }
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); }
private static ISimpleAudioVolume GetVolumeObject(int pid) { // 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); uint val; ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); IAudioSessionControl2 ctl2 = (IAudioSessionControl2)ctl; ctl2.GetProcessId(out val); if (val == pid) { volumeControl = ctl as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); Marshal.ReleaseComObject(ctl2); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
internal static bool IsSpotifyMuted() { ISimpleAudioVolume volume = GetSpotifyVolumeObject(); if (volume == null) { throw new COMException("Volume object creation failed"); } bool mute; volume.GetMute(out mute); Marshal.ReleaseComObject(volume); return(mute); }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation realInterface = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume realSimpleVolume = realAudioSessionControl as ISimpleAudioVolume; if (realInterface != null) { this._AudioMeterInformation = new CoreAudioApi.AudioMeterInformation(realInterface); } if (realSimpleVolume != null) { this._SimpleAudioVolume = new CoreAudioApi.SimpleAudioVolume(realSimpleVolume); } this._AudioSessionControl = realAudioSessionControl; }
/// <summary> /// ミュート状態を設定します。 /// </summary> /// <param name="processID">対象のプロセスID。</param> /// <param name="mute">ミュートするなら true。</param> public static void SetApplicationMute(uint processID, bool mute) { ISimpleAudioVolume volume = GetVolumeObject(processID); if (volume == null) { throw new ArgumentException(ErrorMessageNotFound); } Guid guid = Guid.Empty; volume.SetMute(mute, ref guid); Marshal.ReleaseComObject(volume); }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; if (_meters != null) { _AudioMeterInformation = new AxVolume.AudioMeterInformation(_meters); } if (_volume != null) { _SimpleAudioVolume = new SimpleAudioVolume(_volume); } _AudioSessionControl = realAudioSessionControl; }
public static float?GetApplicationVolume(int pid) { ISimpleAudioVolume volume = GetVolumeObject(pid); if (volume == null) { return(null); } float level; volume.GetMasterVolume(out level); Marshal.ReleaseComObject(volume); return(level * 100); }
internal static float GetSpotifyVolume() { ISimpleAudioVolume volume = GetSpotifyVolumeObject(); if (volume == null) { throw new COMException("Volume object creation failed"); } float level; volume.GetMasterVolume(out level); Marshal.ReleaseComObject(volume); return(level * 100); }
public static bool?GetApplicationMute(int pid) { ISimpleAudioVolume volume = GetVolumeObject(pid); if (volume == null) { return(null); } bool mute; volume.GetMute(out mute); Marshal.ReleaseComObject(volume); return(mute); }
private static ISimpleAudioVolume GetVolumeObject(int target_process_id) { // 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++) { IAudioSessionControl2 ctl; sessionEnumerator.GetSession(i, out ctl); int cpid; ctl.GetProcessId(out cpid); if (cpid == target_process_id) { volumeControl = ctl as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
/// <summary> /// 音量を取得します。 /// </summary> /// <param name="processID">対象のプロセスID。</param> /// <returns>音量( 0.0 - 1.0 )。</returns> public static float GetApplicationVolume(uint processID) { ISimpleAudioVolume volume = GetVolumeObject(processID); if (volume == null) { throw new ArgumentException(ErrorMessageNotFound); } float level; volume.GetMasterVolume(out level); Marshal.ReleaseComObject(volume); return(level); }
/// <summary> /// ミュート状態を取得します。 /// </summary> /// <param name="processID">対象のプロセスID。</param> /// <returns>ミュートされていれば true。</returns> public static bool GetApplicationMute(uint processID) { ISimpleAudioVolume volume = GetVolumeObject(processID); if (volume == null) { throw new ArgumentException(ErrorMessageNotFound); } bool mute; volume.GetMute(out mute); Marshal.ReleaseComObject(volume); return(mute); }
internal static void MuteSpotify(bool mute) { int pid = GetSpotifyPid(); ISimpleAudioVolume volume = GetVolumeObject(pid); if (volume == null) { throw new COMException("Volume object creation failed"); } Guid guid = Guid.Empty; volume.SetMute(mute, ref guid); Marshal.ReleaseComObject(volume); }
public AudioSessionControl(IAudioSessionControl audioSessionControl) { this.audioSessionControlInterface = audioSessionControl; this.audioSessionControlInterface2 = (audioSessionControl as IAudioSessionControl2); IAudioMeterInformation audioMeterInformation = this.audioSessionControlInterface as IAudioMeterInformation; ISimpleAudioVolume simpleAudioVolume = this.audioSessionControlInterface as ISimpleAudioVolume; if (audioMeterInformation != null) { this.audioMeterInformation = new AudioMeterInformation(audioMeterInformation); } if (simpleAudioVolume != null) { this.simpleAudioVolume = new SimpleAudioVolume(simpleAudioVolume); } }
public static void SetApplicationVolume(int pid, float level) { ISimpleAudioVolume volume = GetVolumeObject(pid); //Console.WriteLine("vol object pid " + pid + " = "+ volume); if (volume == null) { //ConsoleManager.Show(); Console.WriteLine("processId " + pid + " is not associated with an audio session, Volume not changed!"); return; } Guid guid = Guid.Empty; volume.SetMasterVolume(level / 100, ref guid); Marshal.ReleaseComObject(volume); }
internal static void SetSpotifyVolume(float level) { int pid = GetSpotifyPid(); ISimpleAudioVolume volume = GetVolumeObject(pid); if (volume == null) { throw new COMException("Volume object creation failed"); } Guid guid = Guid.Empty; volume.SetMasterVolume(level / 100, ref guid); Marshal.ReleaseComObject(volume); }
private static ISimpleAudioVolume GetVolumeObject(int pid) { // get the speakers (1st render + multimedia) device var deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out var speakers); // activate the session manager. we need the enumerator var iidIAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; if (speakers == null) { return(null); } speakers.Activate(ref iidIAudioSessionManager2, 0, IntPtr.Zero, out var o); var mgr = (IAudioSessionManager2)o; // enumerate sessions for on this device if (mgr == null) { return(null); } mgr.GetSessionEnumerator(out var sessionEnumerator); sessionEnumerator.GetCount(out var 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 (var i = 0; i < count; i++) { sessionEnumerator.GetSession(i, out var ctl); ctl.GetProcessId(out var cpid); if (cpid == pid) { volumeControl = ctl as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
/// <summary> /// tries to get an instance of <see cref="ISimpleAudioVolume"/> by its process-id /// </summary> /// <param name="pProcessId">applications process-id</param> /// <param name="pDeviceName">sound output device name</param> /// <param name="oISimpleAudioVolume">instance of <see cref="ISimpleAudioVolume"/></param> /// <returns>true if succesful, false if not</returns> private static bool TryGetISimpleAudioVolumeByProcessId(int pProcessId, string pDeviceName, out ISimpleAudioVolume oISimpleAudioVolume) { oISimpleAudioVolume = null; IMMDevice targetDevice = GetIMMDeviceByName(pDeviceName); if (targetDevice == null) { return(false); } Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; object o; targetDevice.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl2 ctl; sessionEnumerator.GetSession(i, out ctl); int cpid; ctl.GetProcessId(out cpid); if (cpid == pProcessId) { volumeControl = ctl as ISimpleAudioVolume; oISimpleAudioVolume = volumeControl; break; } Marshal.ReleaseComObject(ctl); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(targetDevice); return(volumeControl != null); }
public static void SetApplicationVolume(string name, float level) { ISimpleAudioVolume volume = GetVolumeObject(name); if (level < 1) { level = level * 100; } if (volume == null) { return; } Guid guid = Guid.Empty; volume.SetMasterVolume(level / 100, guid); }
public static void SetApplicationVolume(int procID, float level) { ISimpleAudioVolume volume = GetVolumeObject(procID); if (level < 1) { level *= 100; } if (volume == null) { return; } Guid guid = Guid.Empty; volume.SetMasterVolume(level / 100, guid); }
private static ISimpleAudioVolume GetVolumeObject(int pid) { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); IMMDevice speakers = null; IAudioSessionEnumerator sessionEnumerator = null; IAudioSessionManager2 mgr = null; try { deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; object o; speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); mgr = (IAudioSessionManager2)o; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl2 ctl; sessionEnumerator.GetSession(i, out ctl); int cpid; ctl.GetProcessId(out cpid); if (cpid == pid) { volumeControl = ctl as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); } return(volumeControl); } finally { Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); } }
private static ISimpleAudioVolume GetVolumeObject(int procID) { // get the speakers (1st render + multimedia) device IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out IMMDevice speakers); // activate the session manager. we need the enumerator Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; speakers.Activate(IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; // enumerate sessions for on this device mgr.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator); sessionEnumerator.GetCount(out int count); // search for an audio session with the required process ID ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { sessionEnumerator.GetSession(i, out IAudioSessionControl ctl); if (ctl is IAudioSessionControl2 ctl2) { ctl2.GetProcessId(out uint cProcId); if (cProcId == procID) { volumeControl = ctl as ISimpleAudioVolume; break; } } Marshal.ReleaseComObject(ctl); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
internal AudioSessionControl(IAudioSessionControl realAudioSessionControl) { IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; if (_meters != null) { _AudioMeterInformation = new CoreAudio.AudioMeterInformation(_meters); } if (_volume != null) { _SimpleAudioVolume = new SimpleAudioVolume(_volume); } _AudioSessionControl = realAudioSessionControl; //_AudioSessionEvents = new AudioSessionEvents(this); Marshal.ThrowExceptionForHR(_AudioSessionControl.RegisterAudioSessionNotification(_AudioSessionEvents)); }
public static void SetAllApplicationVolumes(float level) { IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); IMMDevice speakers; deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; object o; speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); string dn; ctl.GetDisplayName(out dn); volumeControl = ctl as ISimpleAudioVolume; if (volumeControl != null) { Guid guid = Guid.Empty; volumeControl.SetMasterVolume(level / 100, ref guid); } Marshal.ReleaseComObject(ctl); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); }
/// <summary> /// Queries the volume controller for the process /// </summary> /// <returns>True if found</returns> public bool Query() { if (!isSupported) { return(false); } IAudioSessionEnumerator sessionEnumerator = null; try { mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); for (int i = 0; i < count; i++) { IAudioSessionControl2 ctl; sessionEnumerator.GetSession(i, out ctl); int cpid; ctl.GetProcessId(out cpid); if (cpid == processId) { volume = ctl as ISimpleAudioVolume; return(true); } Marshal.ReleaseComObject(ctl); } } finally { if (sessionEnumerator != null) { Marshal.ReleaseComObject(sessionEnumerator); } } return(false); }
private static ISimpleAudioVolume GetVolumeObject(string name) { // get the speakers (1st render + multimedia) device IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out IMMDevice speakers); // activate the session manager. we need the enumerator Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; speakers.Activate(IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; // enumerate sessions for on this device mgr.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator); sessionEnumerator.GetCount(out int 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++) { sessionEnumerator.GetSession(i, out IAudioSessionControl ctl); ctl.GetDisplayName(out string 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); }
public Audio() { this.AudioVolume = null; var deviceEnumeratorType = Type.GetTypeFromCLSID(new Guid(ComCLSIDs.MMDeviceEnumeratorCLSID)); var devenum = (IMMDeviceEnumerator)Activator.CreateInstance(deviceEnumeratorType); IMMDevice device = null; if (devenum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out device) == 0) { var iid = new Guid(ComIIDs.IAudioSessionManager2IID); object objAudioSessionManager = null; if (device.Activate(iid, (uint)CLSCTX.CLSCTX_INPROC_SERVER, IntPtr.Zero, out objAudioSessionManager) == 0) { var AudioSessionManager = objAudioSessionManager as IAudioSessionManager2; ISimpleAudioVolume AudioVolume; if (AudioSessionManager.GetSimpleAudioVolume(Guid.Empty, 0, out AudioVolume) == 0) { this.AudioVolume = AudioVolume; } IAudioSessionControl AudioControl; if (AudioSessionManager.GetAudioSessionControl(Guid.Empty, 0, out AudioControl) == 0) { this.AudioControl = AudioControl; this.AudioControl.RegisterAudioSessionNotification(this); } } } }
/// <summary> /// Creates a new Audio endpoint volume /// </summary> /// <param name="realSimpleVolume">ISimpleAudioVolume COM interface</param> internal SimpleAudioVolume(ISimpleAudioVolume realSimpleVolume) { simpleAudioVolume = realSimpleVolume; }