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