c#

клешь рояль

Известный
Автор темы
1,255
550
C#:
using System;
using CSCore.CoreAudioAPI;

namespace AudioDetector
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));
            Console.ReadLine();
        }

        public static MMDevice GetDefaultRenderDevice()
        {
            using (var enumerator = new MMDeviceEnumerator())
            {
                return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            }
        }

        public static bool IsAudioPlaying(MMDevice device)
        {
            using (var meter = AudioMeterInformation.FromDevice(device))
            {
                return meter.PeakValue > 0;
            }
        }
    }
}

Есть такой код который проверяет есть ли звук или нет.
Как сделать это в цикле с задержкой?
Что бы бесконечно проверялось с задержкой, и выводилось если ли звук или нет.
 
Решение
C#:
using System;
using CSCore.CoreAudioAPI;

namespace AudioDetector
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));
            Console.ReadLine();
        }

        public static MMDevice GetDefaultRenderDevice()
        {
            using (var enumerator = new MMDeviceEnumerator())
            {
                return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            }
        }

        public static bool IsAudioPlaying(MMDevice device)
        {
            using (var meter = AudioMeterInformation.FromDevice(device))
            {
                return meter.PeakValue > 0;
            }
        }...

Stiopko

Известный
Проверенный
307
218
C#:
using System;
using CSCore.CoreAudioAPI;

namespace AudioDetector
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));
            Console.ReadLine();
        }

        public static MMDevice GetDefaultRenderDevice()
        {
            using (var enumerator = new MMDeviceEnumerator())
            {
                return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            }
        }

        public static bool IsAudioPlaying(MMDevice device)
        {
            using (var meter = AudioMeterInformation.FromDevice(device))
            {
                return meter.PeakValue > 0;
            }
        }
    }
}

Есть такой код который проверяет есть ли звук или нет.
Как сделать это в цикле с задержкой?
Что бы бесконечно проверялось с задержкой, и выводилось если ли звук или нет.
C#:
using System;
using System.Threading;
using CSCore.CoreAudioAPI;

namespace AudioDetector
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));
                Thread.Sleep(2000); // задержка в миллисекундах
            }
        }

        public static MMDevice GetDefaultRenderDevice()
        {
            using (var enumerator = new MMDeviceEnumerator())
            {
                return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            }
        }

        public static bool IsAudioPlaying(MMDevice device)
        {
            using (var meter = AudioMeterInformation.FromDevice(device))
            {
                return meter.PeakValue > 0;
            }
        }
    }
}
 
  • Нравится
Реакции: клешь рояль

клешь рояль

Известный
Автор темы
1,255
550
C#:
using System;
using System.Threading;
using CSCore.CoreAudioAPI;

namespace AudioDetector
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));
                Thread.Sleep(2000); // задержка в миллисекундах
            }
        }

        public static MMDevice GetDefaultRenderDevice()
        {
            using (var enumerator = new MMDeviceEnumerator())
            {
                return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            }
        }

        public static bool IsAudioPlaying(MMDevice device)
        {
            using (var meter = AudioMeterInformation.FromDevice(device))
            {
                return meter.PeakValue > 0;
            }
        }
    }
}
Нужна ещё помощь, как сделать во время начала потока зажимать букву C, а после задержки отжимать букву C. Заранее спасибо
 

Stiopko

Известный
Проверенный
307
218
Нужна ещё помощь, как сделать во время начала потока зажимать букву C, а после задержки отжимать букву C. Заранее спасибо
C#:
using System;
using System.Runtime.InteropServices;
using System.Threading;
using CSCore.CoreAudioAPI;

namespace AudioDetector
{
    class Program
    {
        [DllImport("user32.dll")]
        public static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);

        const uint KEYEVENTF_KEYUP = 0x0002;
        const uint KEYEVENTF_EXTENDEDKEY = 0x0001;

        static void Main(string[] args)
        {

            while (true)
            {
                Console.WriteLine(IsAudioPlaying(GetDefaultRenderDevice()));

                // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-keybd_event про функцию
                // https://api.farmanager.com/ru/winapi/virtualkeycodes.html номера клавиш

                keybd_event(0x43, 0, KEYEVENTF_EXTENDEDKEY | 0, 0); // 0x43 номер клавиши
                Thread.Sleep(2000);
                keybd_event(0x43, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
            }
        }

        public static MMDevice GetDefaultRenderDevice()
        {
            using (var enumerator = new MMDeviceEnumerator())
            {
                return enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console);
            }
        }

        public static bool IsAudioPlaying(MMDevice device)
        {
            using (var meter = AudioMeterInformation.FromDevice(device))
            {
                return meter.PeakValue > 0;
            }
        }
    }
}
 
  • Нравится
Реакции: клешь рояль