Exemple #1
0
        public CoreAudioController()
        {
            // ReSharper disable once SuspiciousTypeConversion.Global
            var innerEnumerator = ComObjectFactory.GetDeviceEnumerator();

            _innerEnumeratorPtr = Marshal.GetIUnknownForObject(innerEnumerator);

            if (innerEnumerator == null)
            {
                throw new InvalidComObjectException("No Device Enumerator");
            }

            _innerEnumerator = new ThreadLocal <IMultimediaDeviceEnumerator>(() => Marshal.GetUniqueObjectForIUnknown(_innerEnumeratorPtr) as IMultimediaDeviceEnumerator);

            //ComThread.Invoke(() =>
            //{
            //    _systemEvents = new SystemEventNotifcationClient(() => InnerEnumerator);

            //    _systemEvents.DeviceAdded.Subscribe(x => OnDeviceAdded(x.DeviceId));
            //    _systemEvents.DeviceRemoved.Subscribe(x => OnDeviceRemoved(x.DeviceId));

            //    _deviceCache = new HashSet<CoreAudioDevice>();
            //    IMultimediaDeviceCollection collection;
            //    InnerEnumerator.EnumAudioEndpoints(EDataFlow.All, EDeviceState.All, out collection);

            //    using (var coll = new MultimediaDeviceCollection(collection))
            //    {
            //        foreach (var mDev in coll)
            //            CacheDevice(mDev);
            //    }
            //});
        }
Exemple #2
0
        public static void SetDefaultEndpoint(string devId, ERole eRole)
        {
            object policyConfig = null;

            try
            {
                policyConfig = ComObjectFactory.GetPolicyConfig();

                switch (policyConfig)
                {
                case IPolicyConfigRedstone3 config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;

                case IPolicyConfigRedstone2 config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;

                case IPolicyConfigRedstone config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;

                case IPolicyConfigX config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;

                case IPolicyConfig config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;

                case IPolicyConfigVista config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;

                case IPolicyConfigUnknown config:
                    config.SetDefaultEndpoint(devId, eRole);
                    break;
                }
            }
            finally
            {
                if (policyConfig != null && Marshal.IsComObject(policyConfig))
                {
                    Marshal.FinalReleaseComObject(policyConfig);
                }
            }
        }
Exemple #3
0
        public static void SetDefaultEndpoint(string devId, ERole eRole)
        {
            object policyConfig = null;

            try
            {
                policyConfig = ComObjectFactory.GetPolicyConfig();

                var policyConfig7        = policyConfig as IPolicyConfig;
                var policyConfigVista    = policyConfig as IPolicyConfigVista;
                var policyConfigX        = policyConfig as IPolicyConfigX;
                var policyConfigRedstone = policyConfig as IPolicyConfigRedstone;

                if (policyConfigRedstone != null)
                {
                    policyConfigRedstone.SetDefaultEndpoint(devId, eRole);
                }
                else if (policyConfigX != null)
                {
                    policyConfigX.SetDefaultEndpoint(devId, eRole);
                }
                else if (policyConfig7 != null)
                {
                    policyConfig7.SetDefaultEndpoint(devId, eRole);
                }
                else if (policyConfigVista != null)
                {
                    policyConfigVista.SetDefaultEndpoint(devId, eRole);
                }
                else
                {
                    var policyConfigUnknown = policyConfig as IPolicyConfigUnknown;
                    policyConfigUnknown?.SetDefaultEndpoint(devId, eRole);
                }
            }
            finally
            {
                if (policyConfig != null && Marshal.IsComObject(policyConfig))
                {
                    Marshal.FinalReleaseComObject(policyConfig);
                }
            }
        }
Exemple #4
0
        public CoreAudioController(bool autoLoad = true, bool loadMeter = true, bool loadEndpoint = true, bool loadSession = true)
        {
            // ReSharper disable once SuspiciousTypeConversion.Global
            var innerEnumerator = ComObjectFactory.GetDeviceEnumerator();

            _innerEnumeratorPtr = Marshal.GetIUnknownForObject(innerEnumerator);

            if (innerEnumerator == null)
            {
                throw new InvalidComObjectException("No Device Enumerator");
            }

            _innerEnumerator = new ThreadLocal <IMultimediaDeviceEnumerator>(() => Marshal.GetUniqueObjectForIUnknown(_innerEnumeratorPtr) as IMultimediaDeviceEnumerator);

            if (autoLoad)
            {
                LoadDevices(loadMeter, loadEndpoint, loadSession);
            }
        }