AudioSession.EnumerateAll C# (CSharp) Méthode

EnumerateAll() public static méthode

public static EnumerateAll ( ) : IEnumerable
Résultat IEnumerable
        public static IEnumerable<AudioSession> EnumerateAll()
        {
            // get the speakers (1st render + multimedia) device
            var deviceEnumerator = (IMMDeviceEnumerator)(new MMDeviceEnumerator());
            deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia, out IMMDevice speakers);
            if (speakers == null)
                yield break;
            // activate the session manager, we need the enumerator
            speakers.Activate(typeof(IAudioSessionManager2).GUID, 0, IntPtr.Zero, out object o);
            var sessionManager = (IAudioSessionManager2)o;
            if (sessionManager == null)
                yield break;
            // enumerate sessions for on this device
            sessionManager.GetSessionEnumerator(out IAudioSessionEnumerator sessionEnumerator);
            sessionEnumerator.GetCount(out int count);
            for (int i = 0; i < count; i++)
            {
                sessionEnumerator.GetSession(i, out var sessionControl);
                if (sessionControl != null)
                {
                    var meter = sessionControl as IAudioMeterInformation;
                    yield return new AudioSession(sessionControl);
                }
            }
        }
        [DllImport("shlwapi", CharSet = CharSet.Unicode)]

Usage Example

 static void Main(string[] args)
 {
     // here, I'm just monitoring chrome, one of the sessions
     // if you want the whole speakers peak values, use AudioSession.GetSpeakersChannelsPeakValues()
     foreach (var session in AudioSession.EnumerateAll())
     {
         if (session.Process?.ProcessName == "chrome")
         {
             do
             {
                 var values = session.GetChannelsPeakValues();
                 if (values.Length == 0)
                 {
                     continue;
                 }
                 Console.WriteLine(string.Join(" ", values.Select(v => v.ToString("00%"))));
             }while (true);
         }
         session.Dispose();
     }
 }