Getting individual windows application current volume output level as visualized in audio Mixer

前端 未结 2 2187
时光取名叫无心
时光取名叫无心 2020-11-27 05:31

I am trying to write a C# code that outputs the current audio output level from each of the windows application accessing the sound output (as shown with constantly changing

2条回答
  •  忘掉有多难
    2020-11-27 06:08

    You can use CSCore. There is a wrapper for the CoreAudioAPI-Audiosessions. Use something like that (for more details take a look at the unittests: AudioSession-UnitTests):

    private static void Main(string[] args)
    {
        using (var sessionManager = GetDefaultAudioSessionManager2(DataFlow.Render))
        {
            using (var sessionEnumerator = sessionManager.GetSessionEnumerator())
            {
                foreach (var session in sessionEnumerator)
                {
                    using (var audioMeterInformation = session.QueryInterface())
                    {
                        Console.WriteLine(audioMeterInformation.GetPeakValue());
                    }
                }
            }
        }
    
        Console.ReadKey();
    }
    
    private static AudioSessionManager2 GetDefaultAudioSessionManager2(DataFlow dataFlow)
    {
        using (var enumerator = new MMDeviceEnumerator())
        {
            using (var device = enumerator.GetDefaultAudioEndpoint(dataFlow, Role.Multimedia))
            {
                Debug.WriteLine("DefaultDevice: " + device.FriendlyName);
                var sessionManager = AudioSessionManager2.FromMMDevice(device);
                return sessionManager;
            }
        }
    }
    

    To control an applications volume, take a look at the unit-tests here.

提交回复
热议问题