public AudioProcess(AudioDevice audioDevice, IAudioSessionControl2 ctl2) { // Set device AudioDevice = audioDevice; Process_AudioSessionControl = ctl2; // Set process uint processID; ctl2.GetProcessId(out processID); if (processID != 0) { try { Process = Process.GetProcessById((int)processID); } catch (Exception e) { } } // Set SimpleAudioVolume Process_SimpleAudioVolume = ctl2 as ISimpleAudioVolume; Update(); }
public IList<AudioProcess> GetAllSessions() { IAudioSessionManager2 mgr = GetDeviceManager(); IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); IList<AudioProcess> processes = new List<AudioProcess>(); int count; sessionEnumerator.GetCount(out count); for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); if (ctl == null) continue; IAudioSessionControl2 ctl2 = ctl as IAudioSessionControl2; if (ctl2 != null) { processes.Add(new AudioProcess(this, ctl2)); } } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); return processes; }
private static ISimpleAudioVolume GetVolumeObject(string name) { IMMDeviceEnumerator devices = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice device = devices.GetDefaultAudioEndpoint(EDATAFLOW_RENDER, EROLE_MULTIMEDIA); Guid sessionManagerGUID = typeof(IAudioSessionManager2).GUID; IAudioSessionManager2 manager = (IAudioSessionManager2)device.Activate(ref sessionManagerGUID, 0, IntPtr.Zero); IAudioSessionEnumerator sessions = manager.GetSessionEnumerator(); ISimpleAudioVolume volumeObj = null; for (int index = sessions.GetCount() - 1; index >= 0; index--) { IAudioSessionControl2 ctl = sessions.GetSession(index) as IAudioSessionControl2; if (ctl != null) { string identifier = ctl.GetSessionIdentifier(); if (identifier != null && identifier.Contains(name)) { volumeObj = ctl as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); } } Marshal.ReleaseComObject(devices); Marshal.ReleaseComObject(device); Marshal.ReleaseComObject(manager); Marshal.ReleaseComObject(sessions); return(volumeObj); }
internal void FireSessionCreated(IAudioSessionControl2 newSession) { if (OnSessionCreated != null) { OnSessionCreated(this, newSession); } }
public static void SetApplicationVolume(IAudioSessionControl2 name, float level) { var volume = name as ISimpleAudioVolume; var guid = Guid.Empty; volume?.SetMasterVolume(level / 100, ref guid); }
public static string GetIconpath(string name) { IAudioSessionControl2 ctl2 = GetVolumeObject(name) as IAudioSessionControl2; string path; ctl2.GetIconPath(out path); return(path); }
public static int GetApplicationVolume(IAudioSessionControl2 name) { var volume = name as ISimpleAudioVolume; var level = 0f; volume?.GetMasterVolume(out level); return(Convert.ToInt32(level * 100)); }
public void Dispose() { if (_ctl != null) { Marshal.ReleaseComObject(_ctl); _ctl = null; } }
public VolumeMaster() { // get the speakers (1st render + multimedia) device List <AudioSession> list = new List <AudioSession>(); IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); IMMDevice speakers; IMMDevice SPDIF; deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out SPDIF); Guid GUID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; Guid GUID_IAudioEndpointVolume = typeof(IAudioEndpointVolume).GUID; object o; object o2; int i1 = speakers.Activate(ref GUID_IAudioSessionManager2, 0, IntPtr.Zero, out o); int i2 = SPDIF.Activate(ref GUID_IAudioEndpointVolume, 0, IntPtr.Zero, out o2); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; audioEndpointVolume = (IAudioEndpointVolume)o2; if (mgr == null) { Sessions = list; return; } IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); if (ctl == null) { continue; } IAudioSessionControl2 ctl2 = ctl as IAudioSessionControl2; if (ctl2 != null) { list.Add(new AudioSession(ctl2)); } } Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Sessions = list; }
public static bool AppMuteState(IAudioSessionControl2 name) { var app = name as ISimpleAudioVolume; var muteState = false; app?.GetMute(out muteState); return(muteState); }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { //IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; //ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; //if (_meters != null) // _AudioMeterInformation = new CoreAudioApi.AudioMeterInformation(_meters); //if (_volume != null) // _SimpleAudioVolume = new SimpleAudioVolume(_volume); _AudioSessionControl = realAudioSessionControl; }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; if (_meters != null) _AudioMeterInformation = new CoreAudioApi.AudioMeterInformation(_meters); if (_volume != null) _SimpleAudioVolume = new SimpleAudioVolume(_volume); _AudioSessionControl = realAudioSessionControl; }
public static void MuteApp(IAudioSessionControl2 name) { var app = name as ISimpleAudioVolume; var guid = Guid.Empty; var muteState = false; app?.GetMute(out muteState); app?.SetMute(!muteState, ref guid); }
// Lists all devices, and for each device all processes that are currently playing sound using that device public static List <SoundInfoDevice> getSoundInfo() { List <SoundInfoDevice> soundInfoDevices = new List <SoundInfoDevice>(); DeviceEnumerator enumerator = new DeviceEnumerator(); IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)enumerator; IMMDeviceCollection deviceCollection = deviceEnumerator.EnumAudioEndpoints(EDataFlow.eRender, DeviceStatemask.DEVICE_STATE_ACTIVE); uint deviceCount = deviceCollection.GetCount(); for (uint i = 0; i < deviceCount; i++) { SoundInfoDevice soundInfoDevice = new SoundInfoDevice(); soundInfoDevices.Add(soundInfoDevice); IMMDevice device = deviceCollection.Item(i); string deviceId = device.GetId(); soundInfoDevice.ID = deviceId; IMMPropertyStore propertyStore = device.OpenPropertyStore(ProperyStoreMode.STGM_READ); PropertyKey propertyKeyDeviceDesc = new PropertyKey(); propertyKeyDeviceDesc.fmtid = new Guid(0xa45c254e, 0xdf1c, 0x4efd, 0x80, 0x20, 0x67, 0xd1, 0x46, 0xa8, 0x50, 0xe0); propertyKeyDeviceDesc.pid = 2; PropVariant deviceNamePtr = propertyStore.GetValue(ref propertyKeyDeviceDesc); string deviceName = Marshal.PtrToStringUni(deviceNamePtr.pszVal); soundInfoDevice.name = deviceName; Guid guidAudioSessionManager2 = new Guid("77AA99A0-1BD6-484F-8BC7-2C654C9A9B6F"); IAudioSessionManager2 audioSessionManager = (IAudioSessionManager2)device.Activate(ref guidAudioSessionManager2, (int)ClsCtx.CLSCTX_ALL, IntPtr.Zero); IAudioSessionEnumerator sessionEnumerator = audioSessionManager.GetSessionEnumerator(); int sessionCount = sessionEnumerator.GetCount(); for (int j = 0; j < sessionCount; j++) { IAudioSessionControl audioSessionControl = sessionEnumerator.GetSession(j); IAudioSessionControl2 audioSessionControl2 = (IAudioSessionControl2)audioSessionControl; AudioSessionState state = audioSessionControl.GetState(); if (state == AudioSessionState.AudioSessionStateActive) { SoundInfoSession soundInfoSession = new SoundInfoSession(); soundInfoDevice.sessions.Add(soundInfoSession); string displayName = audioSessionControl.GetDisplayName(); string iconPath = audioSessionControl.GetIconPath(); int processId = audioSessionControl2.GetProcessId(); string processName = Process.GetProcessById(processId).MainWindowTitle; soundInfoSession.pid = processId; soundInfoSession.windowName = processName; } } } return(soundInfoDevices); }
private static ISimpleAudioVolume GetVolumeObject(int pid) { // get the speakers (1st render + multimedia) device IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); IMMDevice speakers; deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); // activate the session manager. we need the enumerator Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; object o; speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; // enumerate sessions for on this device IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); // search for an audio session with the required pid ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); IAudioSessionControl2 ctl2 = ctl as IAudioSessionControl2; //uint pid; //ctl2.GetProcessId(out pid); //Process p = Process.GetProcessById((int)pid); // ctl2.SetDisplayName(p.ProcessName, Guid.Empty); uint npid; ctl2.GetProcessId(out npid); if (pid == npid) { volumeControl = ctl2 as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); Marshal.ReleaseComObject(ctl2); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
/// <summary> /// Constructor. /// </summary> /// <param name="audioSessionControl"></param> public AudioSessionControl(IAudioSessionControl audioSessionControl) { audioSessionControlInterface = audioSessionControl; audioSessionControlInterface2 = audioSessionControl as IAudioSessionControl2; var meters = audioSessionControlInterface as IAudioMeterInformation; var volume = audioSessionControlInterface as ISimpleAudioVolume; if (meters != null) audioMeterInformation = new AudioMeterInformation(meters); if (volume != null) simpleAudioVolume = new SimpleAudioVolume(volume); }
internal AudioSessionControl2(IAudioSessionControl2 realAudioSessionControl2) { _AudioSessionControl2 = realAudioSessionControl2; IAudioMeterInformation _meters = _AudioSessionControl2 as IAudioMeterInformation; ISimpleAudioVolume _volume = _AudioSessionControl2 as ISimpleAudioVolume; if (_meters != null) _AudioMeterInformation = new CoreAudio.AudioMeterInformation(_meters); if (_volume != null) _SimpleAudioVolume = new SimpleAudioVolume(_volume); _AudioSessionEvents = new AudioSessionEvents(this); Marshal.ThrowExceptionForHR(_AudioSessionControl2.RegisterAudioSessionNotification(_AudioSessionEvents)); }
/* added -> */ public AudioSessionControl GetAudioSessionControl(Guid AudioSessionGuid, bool CrossProcessSession) { IAudioSessionControl2 result = null; int hr = _AudioSessionManager.GetAudioSessionControl(ref AudioSessionGuid, (uint)(CrossProcessSession ? 1 : 0), out result); Marshal.ThrowExceptionForHR(hr); if (result == null) { return(null); } return(new AudioSessionControl(result)); }
// getting IAudioSessionControl2 out of IAudioSessionControl via QueryInterface private static IAudioSessionControl2 GetAudioControl2(IAudioSessionControl ctl) { IntPtr pUnk = Marshal.GetIUnknownForObject(ctl); IntPtr pI; Guid baseGuid = typeof(IAudioSessionControl).GUID; Marshal.QueryInterface(pUnk, ref baseGuid, out pI); object asc = Marshal.GetObjectForIUnknown(pI); IAudioSessionControl2 asc2 = (IAudioSessionControl2)asc; return(asc2); }
public AudioSessionControl(IAudioSessionControl audioSessionControl) { _audioSessionControl = audioSessionControl; _audioSessionControl2 = audioSessionControl as IAudioSessionControl2; //if (_audioSessionControl2 == null) // throw new InvalidOperationException("Not supported on this version of Windows"); if (_audioSessionControl is ISimpleAudioVolume simpleVolume) { _simpleAudioVolume = new SimpleAudioVolume(simpleVolume); } }
/// <summary> /// Constructor. /// </summary> /// <param name="audioSessionControl"></param> public AudioSessionControl(IAudioSessionControl audioSessionControl) { audioSessionControlInterface = audioSessionControl; audioSessionControlInterface2 = audioSessionControl as IAudioSessionControl2; if (audioSessionControlInterface is IAudioMeterInformation meters) { AudioMeterInformation = new AudioMeterInformation(meters); } if (audioSessionControlInterface is ISimpleAudioVolume volume) { SimpleAudioVolume = new SimpleAudioVolume(volume); } }
private static ISimpleAudioVolume GetVolumeObject(int pid) { IMMDeviceEnumerator iMMDeviceEnumerator = null; IAudioSessionEnumerator SessionEnum = null; IAudioSessionManager2 audioSessionManager = null; IMMDevice ppDevice = null; try { iMMDeviceEnumerator = (IMMDeviceEnumerator) new MMDeviceEnumerator(); iMMDeviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out ppDevice); Guid iid = typeof(IAudioSessionManager2).GUID; ppDevice.Activate(ref iid, 0, IntPtr.Zero, out object ppInterface); audioSessionManager = (IAudioSessionManager2)ppInterface; audioSessionManager.GetSessionEnumerator(out SessionEnum); SessionEnum.GetCount(out int SessionCount); ISimpleAudioVolume result = null; for (int i = 0; i < SessionCount; i++) { IAudioSessionControl2 Session = null; SessionEnum.GetSession(i, out Session); Session.GetProcessId(out int pRetVal); if (pRetVal == pid) { result = (Session as ISimpleAudioVolume); break; } } return(result); } finally { if (SessionEnum != null) { Marshal.ReleaseComObject(SessionEnum); } if (audioSessionManager != null) { Marshal.ReleaseComObject(audioSessionManager); } if (ppDevice != null) { Marshal.ReleaseComObject(ppDevice); } if (iMMDeviceEnumerator != null) { Marshal.ReleaseComObject(iMMDeviceEnumerator); } } }
// gets volume object needed for public methods to operate private static ISimpleAudioVolume GetVolumeObject(uint processId) { MMDeviceEnumerator deviceEnumerator; IMMDeviceEnumerator iDeviceEnumerator; IMMDevice speakers; IAudioSessionManager2 mgr; IAudioSessionEnumerator sessionEnumerator; int count; //GetVolumeControls(out deviceEnumerator, out speakers, out mgr, out sessionEnumerator, out count); deviceEnumerator = new MMDeviceEnumerator(); iDeviceEnumerator = (IMMDeviceEnumerator)deviceEnumerator; iDeviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out object o); mgr = (IAudioSessionManager2)o; mgr.GetSessionEnumerator(out sessionEnumerator); sessionEnumerator.GetCount(out count); ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl asc; sessionEnumerator.GetSession(i, out asc); IAudioSessionControl2 asc2 = GetAudioControl2(asc); uint currentProcessId; asc2.GetProcessId(out currentProcessId); if (currentProcessId == processId) { volumeControl = asc as ISimpleAudioVolume; Marshal.ReleaseComObject(asc2); break; } Marshal.ReleaseComObject(asc2); Marshal.ReleaseComObject(asc); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(o); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(iDeviceEnumerator); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
private static ISimpleAudioVolume GetVolumeObject(int pid) { // get the speakers (1st render + multimedia) device IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); IMMDevice speakers; deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); // activate the session manager. we need the enumerator Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; object o; speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; // enumerate sessions for on this device IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); uint val; ISimpleAudioVolume volumeControl = null; for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); IAudioSessionControl2 ctl2 = (IAudioSessionControl2)ctl; ctl2.GetProcessId(out val); if (val == pid) { volumeControl = ctl as ISimpleAudioVolume; break; } Marshal.ReleaseComObject(ctl); Marshal.ReleaseComObject(ctl2); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); return(volumeControl); }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; if (_meters != null) { _AudioMeterInformation = new AxVolume.AudioMeterInformation(_meters); } if (_volume != null) { _SimpleAudioVolume = new SimpleAudioVolume(_volume); } _AudioSessionControl = realAudioSessionControl; }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation realInterface = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume realSimpleVolume = realAudioSessionControl as ISimpleAudioVolume; if (realInterface != null) { this._AudioMeterInformation = new CoreAudioApi.AudioMeterInformation(realInterface); } if (realSimpleVolume != null) { this._SimpleAudioVolume = new CoreAudioApi.SimpleAudioVolume(realSimpleVolume); } this._AudioSessionControl = realAudioSessionControl; }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; if (_meters != null) _AudioMeterInformation = new CoreAudioApi.AudioMeterInformation(_meters); if (_volume != null) _SimpleAudioVolume = new SimpleAudioVolume(_volume); _AudioSessionControl = realAudioSessionControl; /* added -> */ _audioSessionEvents = new AudioSessionEvents(this); Marshal.ThrowExceptionForHR(_AudioSessionControl.RegisterAudioSessionNotification(_audioSessionEvents)); /* <- added */ }
public AudioSession(IAudioSessionControl2 control) { _control = control; control.GetState(out var state); State = state; control.GetGroupingParam(out var guid); GroupingParam = guid; IconPath = GetString(control.GetIconPath); DisplayName = GetString(control.GetDisplayName); _icon = new Lazy<Icon>(GetIcon, true); _process = new Lazy<Process>(() => Process.GetProcessById(ProcessId), true); Id = GetString(control.GetSessionIdentifier); InstanceId = GetString(control.GetSessionInstanceIdentifier); control.GetProcessId(out var pid); ProcessId = pid; IsSystemSounds = control.IsSystemSoundsSession() == 0; }
/// <summary> /// Constructor. /// </summary> /// <param name="audioSessionControl"></param> public AudioSessionControl(IAudioSessionControl audioSessionControl) { audioSessionControlInterface = audioSessionControl; audioSessionControlInterface2 = audioSessionControl as IAudioSessionControl2; var meters = audioSessionControlInterface as IAudioMeterInformation; var volume = audioSessionControlInterface as ISimpleAudioVolume; if (meters != null) { audioMeterInformation = new AudioMeterInformation(meters); } if (volume != null) { simpleAudioVolume = new SimpleAudioVolume(volume); } }
internal AudioSessionControl2(IAudioSessionControl2 realAudioSessionControl2) { _AudioSessionControl2 = realAudioSessionControl2; IAudioMeterInformation _meters = _AudioSessionControl2 as IAudioMeterInformation; ISimpleAudioVolume _volume = _AudioSessionControl2 as ISimpleAudioVolume; if (_meters != null) { _AudioMeterInformation = new CoreAudio.AudioMeterInformation(_meters); } if (_volume != null) { _SimpleAudioVolume = new SimpleAudioVolume(_volume); } _AudioSessionEvents = new AudioSessionEvents(this); Marshal.ThrowExceptionForHR(_AudioSessionControl2.RegisterAudioSessionNotification(_AudioSessionEvents)); }
/// <summary> /// Constructor. /// </summary> /// <param name="audioSessionControl"></param> public AudioSessionControl(IAudioSessionControl audioSessionControl) { audioSessionControlInterface = audioSessionControl; audioSessionControlInterface2 = audioSessionControl as IAudioSessionControl2; // ReSharper disable once SuspiciousTypeConversion.Global var meters = audioSessionControlInterface as IAudioMeterInformation; // ReSharper disable once SuspiciousTypeConversion.Global var volume = audioSessionControlInterface as ISimpleAudioVolume; if (meters != null) { AudioMeterInformation = new AudioMeterInformation(meters); } if (volume != null) { SimpleAudioVolume = new SimpleAudioVolume(volume); } }
public AudioSessionControl2(IAudioSessionControl2 realAudioSessionControl2) { _AudioSessionControl2 = realAudioSessionControl2; if (_AudioSessionControl2 is IAudioMeterInformation _meters) { _AudioMeterInformation = new AudioMeterInformation(_meters); } if (_AudioSessionControl2 is ISimpleAudioVolume _volume1) { _SimpleAudioVolume = new SimpleAudioVolume(_volume1); } //IAudioVolumeLevel _volume2 = _AudioSessionControl2 as IAudioVolumeLevel; //if (_volume2 != null) _AudioVolumeLevel = new AudioVolumeLevel(_volume2); _AudioSessionEvents = new AudioSessionEvents(this); Marshal.ThrowExceptionForHR(_AudioSessionControl2.RegisterAudioSessionNotification(_AudioSessionEvents)); }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { IAudioMeterInformation _meters = realAudioSessionControl as IAudioMeterInformation; ISimpleAudioVolume _volume = realAudioSessionControl as ISimpleAudioVolume; if (_meters != null) { _AudioMeterInformation = new CoreAudioApi.AudioMeterInformation(_meters); } if (_volume != null) { _SimpleAudioVolume = new SimpleAudioVolume(_volume); } _AudioSessionControl = realAudioSessionControl; /* added -> */ _audioSessionEvents = new AudioSessionEvents(this); Marshal.ThrowExceptionForHR(_AudioSessionControl.RegisterAudioSessionNotification(_audioSessionEvents)); /* <- added */ }
public static IEnumerable <int> EnumerateApplicationPIDs() { // get the speakers (1st render + multimedia) device IMMDeviceEnumerator deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator()); IMMDevice speakers; deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out speakers); // activate the session manager. we need the enumerator Guid IID_IAudioSessionManager2 = typeof(IAudioSessionManager2).GUID; object o; speakers.Activate(ref IID_IAudioSessionManager2, 0, IntPtr.Zero, out o); IAudioSessionManager2 mgr = (IAudioSessionManager2)o; // enumerate sessions for on this device IAudioSessionEnumerator sessionEnumerator; mgr.GetSessionEnumerator(out sessionEnumerator); int count; sessionEnumerator.GetCount(out count); for (int i = 0; i < count; i++) { IAudioSessionControl ctl; sessionEnumerator.GetSession(i, out ctl); IAudioSessionControl2 ctl2 = ctl as IAudioSessionControl2; uint upid; ctl2.GetProcessId(out upid); int pid = (int)upid; yield return(pid); Marshal.ReleaseComObject(ctl); Marshal.ReleaseComObject(ctl2); } Marshal.ReleaseComObject(sessionEnumerator); Marshal.ReleaseComObject(mgr); Marshal.ReleaseComObject(speakers); Marshal.ReleaseComObject(deviceEnumerator); }
internal AudioSessionControl(IAudioSessionControl2 realAudioSessionControl) { _AudioSessionControl = realAudioSessionControl; }
internal void FireSessionCreated(IAudioSessionControl2 newSession) { if (OnSessionCreated != null) OnSessionCreated(this, newSession); }
public int OnSessionCreated(IAudioSessionControl2 NewSession) { _Parent.FireSessionCreated(NewSession); return 0; }