Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 public static MMDeviceAPI.IMMDeviceCollection GetDeviceCollection(this MMDeviceAPI.MMDeviceEnumerator deviceEnumerator, MMDeviceAPI.EDataFlow dataFlow, uint stateMask)
 {
     deviceEnumerator.EnumAudioEndpoints(dataFlow, stateMask, out var deviceCollection);
     return(deviceCollection);
 }
Ejemplo n.º 3
0
 public static MMDeviceAPI.IMMDevice GetDeviceById(this MMDeviceAPI.MMDeviceEnumerator deviceEnumerator, string deviceId)
 {
     deviceEnumerator.GetDevice(deviceId, out var device);
     return(device);
 }