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); // } //}); }
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); } } }
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); } } }
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); } }