public AudioDeviceSessionCollection(IAudioDevice parent, IMMDevice device) { Trace.WriteLine($"AudioDeviceSessionCollection Create dev={device.GetId()}"); _parent = new WeakReference <IAudioDevice>(parent); _dispatcher = App.Current.Dispatcher; Task.Factory.StartNew(() => { try { _sessionManager = device.Activate <IAudioSessionManager2>(); _sessionManager.RegisterSessionNotification(this); var enumerator = _sessionManager.GetSessionEnumerator(); int count = enumerator.GetCount(); for (int i = 0; i < count; i++) { CreateAndAddSession(enumerator.GetSession(i)); } } catch (Exception ex) { Trace.TraceError($"{ex}"); } }); }
private void RegisterNotifications() { UnregisterNotifications(); _audioSessionNotification = new AudioSessionNotification(); Marshal.ThrowExceptionForHR(_audioSessionManager2.RegisterSessionNotification(_audioSessionNotification)); }
public void RefreshSessions() { UnregisterNotifications(); Marshal.ThrowExceptionForHR(_AudioSessionManager2.GetSessionEnumerator(out IAudioSessionEnumerator _SessionEnum)); _Sessions = new SessionCollection(_SessionEnum); _AudioSessionNotification = new AudioSessionNotification(this); Marshal.ThrowExceptionForHR(_AudioSessionManager2.RegisterSessionNotification(_AudioSessionNotification)); }
/// <summary> /// Refresh session of current device. /// </summary> public void RefreshSessions() { UnregisterNotifications(); if (audioSessionInterface2 != null) { Marshal.ThrowExceptionForHR(audioSessionInterface2.GetSessionEnumerator(out var sessionEnum)); sessions = new SessionCollection(sessionEnum); audioSessionNotification = new AudioSessionNotification(this); Marshal.ThrowExceptionForHR(audioSessionInterface2.RegisterSessionNotification(audioSessionNotification)); } }
void InitializeAudioSessions() { if (_audioDataFlow == AudioDataFlow.eCapture) { return; } //Get Session manager var result = _audioDevice.Activate(typeof(IAudioSessionManager2).GUID, ClsCtx.ALL, IntPtr.Zero, out object obj); _audioSessionManager2 = (IAudioSessionManager2)obj; //Register event for get session creation sessionNotify = new AudioSessionNotification(); _audioSessionManager2.RegisterSessionNotification(sessionNotify); InitializeAudioSessionDict(); }
public AudioDeviceSessionCollection(IAudioDevice parent, IMMDevice device, Dispatcher foregroundDispatcher) { _parent = new WeakReference <IAudioDevice>(parent); _dispatcher = foregroundDispatcher; try { _sessionManager = device.Activate <IAudioSessionManager2>(); _sessionManager.RegisterSessionNotification(this); var enumerator = _sessionManager.GetSessionEnumerator(); int count = enumerator.GetCount(); for (int i = 0; i < count; i++) { CreateAndAddSession(enumerator.GetSession(i)); } } catch (Exception ex) { Trace.WriteLine($"AudioDeviceSessionCollection Create dev={device.GetId()} {ex}"); } }
public CoreAudioSessionController(CoreAudioDevice device, IAudioSessionManager2 audioSessionManager) { if (audioSessionManager == null) { throw new ArgumentNullException(nameof(audioSessionManager)); } ComThread.Assert(); _device = device; _audioSessionManager = audioSessionManager; _audioSessionManager.RegisterSessionNotification(this); _sessionCache = new List <CoreAudioSession>(0); _sessionCreated = new Broadcaster <IAudioSession>(); _sessionDisconnected = new Broadcaster <string>(); RefreshSessions(); _processTerminatedSubscription = ProcessMonitor.ProcessTerminated.Subscribe(processId => { RemoveSessions(_sessionCache.Where(x => x.ProcessId == processId)); }); }