public AudioMeterEvent( string audioDeviceId, SignalRatio minimumLevel, System.TimeSpan minimumDuration, System.TimeSpan period, System.TimeSpan keepaliveInterval, System.TimeSpan keepaliveDuration, Logger logger) { MinimumLevel = minimumLevel; MinimumDuration = minimumDuration; KeepaliveInterval = keepaliveInterval; KeepaliveDuration = keepaliveDuration; Logger = logger; var deviceEnumerator = new MMDeviceAPI.MMDeviceEnumerator(); MMDeviceAPI.IMMDevice device; try { device = deviceEnumerator.GetDeviceById(audioDeviceId); } catch (System.Exception exception) { throw new System.Exception("Unable to get audio device using specified ID", exception); } IAudioMeterInformation = device.ActivateInterface <EndpointVolume.IAudioMeterInformation>(); Period = period; if (Period <= System.TimeSpan.Zero) { Period = new System.TimeSpan(minimumDuration.Ticks / 8); device.ActivateInterface <AudioClient.IAudioClient>().GetDevicePeriod(out var defaultDevicePeriod, out var minimumDevicePeriodTicks); var minimumDevicePeriod = new System.TimeSpan(minimumDevicePeriodTicks); if (Period < minimumDevicePeriod) { Period = minimumDevicePeriod; } } Logger.Log("Using minimum level: " + MinimumLevel + ", minimum duration: " + MinimumDuration + ", period: " + Period + ", keepalive interval: " + KeepaliveInterval + ", keepalive duration: " + KeepaliveDuration); }
public static MMDeviceAPI.IMMDeviceCollection GetDeviceCollection(this MMDeviceAPI.MMDeviceEnumerator deviceEnumerator, MMDeviceAPI.EDataFlow dataFlow, uint stateMask) { deviceEnumerator.EnumAudioEndpoints(dataFlow, stateMask, out var deviceCollection); return(deviceCollection); }
public static MMDeviceAPI.IMMDevice GetDeviceById(this MMDeviceAPI.MMDeviceEnumerator deviceEnumerator, string deviceId) { deviceEnumerator.GetDevice(deviceId, out var device); return(device); }