Exemple #1
0
        internal AudioSessionManager(IAudioSessionManager audioSessionManager)
        {
            _audioSessionManager2 = audioSessionManager as IAudioSessionManager2;

            //if (_audioSessionManager2 == null)
            //    throw new InvalidOperationException("Not supported on this version of Windows");
        }
        internal AudioSessionManager(IAudioSessionManager audioSessionManager)
        {
            audioSessionInterface  = audioSessionManager;
            audioSessionInterface2 = audioSessionManager as IAudioSessionManager2;

            RefreshSessions();
        }
        internal AudioSessionManager(IAudioSessionManager audioSessionManager)
        {
            audioSessionInterface = audioSessionManager;
            audioSessionInterface2 = audioSessionManager as IAudioSessionManager2;

            RefreshSessions();
        }
Exemple #4
0
        public void SetAppAndSystemVolume(float volume, bool muted)
        {
            Guid guidEnumetator = typeof(IMMDeviceEnumerator).GUID;
            Guid guidManager    = typeof(IAudioSessionManager).GUID;
            Guid guidVolume     = typeof(IAudioEndpointVolume).GUID;

            CoCreateInstance(ref MMDeviceEnumerator, null, CLSCTX_ALL, ref guidEnumetator, out IUnknown _enumerater);
            IMMDeviceEnumerator enumerator = _enumerater as IMMDeviceEnumerator;

            enumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out IMMDevice endpoint);
            endpoint.Activate(ref guidManager, CLSCTX_ALL, IntPtr.Zero, out IUnknown _manager);
            endpoint.Activate(ref guidVolume, CLSCTX_ALL, IntPtr.Zero, out IUnknown _volume);
            IAudioSessionManager manager = _manager as IAudioSessionManager;

            manager.GetSimpleAudioVolume(Guid.Empty, false, out ISimpleAudioVolume processvolume);
            processvolume.GetMasterVolume(out float prevolume);
            if (prevolume != volume)
            {
                processvolume.SetMasterVolume(volume, Guid.Empty);
            }

            processvolume.SetMute(muted, Guid.Empty);
            IAudioEndpointVolume systemvolume = _volume as IAudioEndpointVolume;

            systemvolume.SetMasterVolumeLevelScalar(muted?0:1, Guid.Empty);
            systemvolume.SetMute(muted, Guid.Empty);
        }
Exemple #5
0
        /// <summary>
        /// Processes the media session event.
        /// </summary>
        private void ProcessEvent()
        {
            while (m_Session != null)
            {
                try {
                    m_Session.GetEvent(1, out IMFMediaEvent _event);//requests events and returns immediately
                    _event.GetType(out MediaEventType eventtype);
                    switch (eventtype)
                    {
                    case MediaEventType.MESessionEnded:
                        PlaybackState = PlaybackState.Stopped;
                        PlaybackStopped?.Invoke(this, new StoppedEventArgs());
                        break;

                    case MediaEventType.MESessionTopologyStatus:    //topology loaded
                        Guid guidManager = typeof(IAudioSessionManager).GUID;
                        (new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator).
                        GetDefaultAudioEndpoint(CoreAudioApi.DataFlow.Render, CoreAudioApi.Role.Multimedia, out IMMDevice endoint);
                        endoint.Activate(ref guidManager, ClsCtx.ALL, IntPtr.Zero, out object _manager);
                        IAudioSessionManager manager = _manager as IAudioSessionManager;
                        manager.GetSimpleAudioVolume(Guid.Empty, 0, out m_volume);

                        m_Session.GetClock(out m_clock);

                        Guid guid_ratecontrol        = typeof(IMFRateControl).GUID;
                        Guid MF_RATE_CONTROL_SERVICE = Guid.Parse("866fa297-b802-4bf8-9dc9-5e3b6a9f53c9");
                        MediaFoundationInterop.MFGetService(m_Session, ref MF_RATE_CONTROL_SERVICE, ref guid_ratecontrol, out object _control);    //gets rate control
                        m_rate   = _control as IMFRateControl;
                        Prepared = true;
                        break;
                    }
                    _event = null;
                }
                catch (COMException e)
                {
                    if (e.HResult == MediaFoundationErrors.MF_E_NO_EVENTS_AVAILABLE)
                    {
                        continue;
                    }
                    else
                    {
                        throw e;
                    }
                }
                catch (ThreadAbortException)
                {
                    break;
                }
            }
        }
Exemple #6
0
        private static void MuteApplication()
        {
            IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());

            deviceEnumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia, out IMMDevice device);

            Guid guid = typeof(IAudioSessionManager).GUID;

            device.Activate(ref guid, 0, IntPtr.Zero, out Object interfacePointer);

            IAudioSessionManager audioSessionManager = (IAudioSessionManager)interfacePointer;

            audioSessionManager.GetSimpleAudioVolume(Guid.Empty, 0, out ISimpleAudioVolume simpleAudioVolume);
            Marshal.ThrowExceptionForHR(simpleAudioVolume.SetMute(true, Guid.Empty));

            audioSessionManager.GetAudioSessionControl(Guid.Empty, 0, out IAudioSessionControl audioSessionControl);
            Marshal.ThrowExceptionForHR(audioSessionControl.SetDisplayName("Audio Fixer", Guid.Empty));

            Marshal.ReleaseComObject(audioSessionControl);
            Marshal.ReleaseComObject(simpleAudioVolume);
            Marshal.ReleaseComObject(audioSessionManager);
            Marshal.ReleaseComObject(device);
            Marshal.ReleaseComObject(deviceEnumerator);
        }
Exemple #7
0
 internal AudioSessionManager(IAudioSessionManager audioSessionManager)
 {
     this.audioSessionInterface  = audioSessionManager;
     this.audioSessionInterface2 = (audioSessionManager as IAudioSessionManager2);
     this.RefreshSessions();
 }
 internal AudioSessionManager(IAudioSessionManager audioSessionManager)
 {
     audioSessionInterface = audioSessionManager;
 }
Exemple #9
0
 internal AudioSessionManager(IAudioSessionManager audioSessionManager)
 {
     audioSessionInterface = audioSessionManager;
 }
 internal AudioSessionManager(IAudioSessionManager realAudioSessionManager)
 {
     _AudioSessionManager = realAudioSessionManager;
 }
 internal AudioSessionManager(IAudioSessionManager realAudioSessionManager)
 {
     _AudioSessionManager = realAudioSessionManager;
 }