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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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;
        }
Example #9
0
        /// <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);
        }
Example #10
0
        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;
        }
Example #11
0
        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);
        }
Example #12
0
        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);
        }
Example #13
0
        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);
        }
Example #14
0
        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);
        }
Example #15
0
        /// <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);
        }
Example #16
0
        /// <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);
        }
Example #18
0
        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);
        }
Example #21
0
        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);
        }
Example #22
0
        /// <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);
        }
Example #24
0
        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);
        }
Example #25
0
        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);
            }
        }
Example #26
0
        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);
        }
Example #29
0
            /// <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);
            }
Example #30
0
        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);
        }
Example #31
-2
        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);
                    }

                }
            }
        }
Example #32
-2
 /// <summary>
 /// Creates a new Audio endpoint volume
 /// </summary>
 /// <param name="realSimpleVolume">ISimpleAudioVolume COM interface</param>
 internal SimpleAudioVolume(ISimpleAudioVolume realSimpleVolume)
 {
     simpleAudioVolume = realSimpleVolume;
 }