Ejemplo n.º 1
0
        private void OnSessionCreated(object sender, NAudio.CoreAudioApi.Interfaces.IAudioSessionControl asession)
        {
            Debug.Assert(System.Threading.Thread.CurrentThread != Context, "Must be called in same thread.");

            try
            {
                var session = new NAudio.CoreAudioApi.AudioSessionControl(asession);

                int    pid  = (int)session.GetProcessID;
                string name = session.DisplayName;

                float volume = session.SimpleAudioVolume.Volume;

                var info = ProcessManagerUtility.GetInfo(pid, getPath: true);
                if (info != null)
                {
                    //OnNewSession?.Invoke(this, info);
                    var prc = Taskmaster.processmanager.getController(info.Name);
                    if (prc == null && !string.IsNullOrEmpty(info.Path))
                    {
                        prc = Taskmaster.processmanager.getWatchedPath(info);
                    }
                    if (prc != null)
                    {
                        bool  volAdjusted = false;
                        float oldvolume   = session.SimpleAudioVolume.Volume;
                        switch (prc.VolumeStrategy)
                        {
                        default:
                        case AudioVolumeStrategy.Ignore:
                            break;

                        case AudioVolumeStrategy.Force:
                            session.SimpleAudioVolume.Volume = prc.Volume;
                            volAdjusted = true;
                            break;

                        case AudioVolumeStrategy.Decrease:
                            if (session.SimpleAudioVolume.Volume > prc.Volume)
                            {
                                session.SimpleAudioVolume.Volume = prc.Volume;
                                volAdjusted = true;
                            }
                            break;

                        case AudioVolumeStrategy.Increase:
                            if (session.SimpleAudioVolume.Volume < prc.Volume)
                            {
                                session.SimpleAudioVolume.Volume = prc.Volume;
                                volAdjusted = true;
                            }
                            break;
                        }

                        if (volAdjusted)
                        {
                            Serilog.Log.Information("<Audio> {Process} (#{Pid}) volume changed from {Source} to {Target}",
                                                    info.Name, info.Id, string.Format("{0:N1}%", oldvolume * 100), string.Format("{0:N1}%", prc.Volume * 100));
                        }
                        else
                        {
                            if (Taskmaster.ShowInaction && Taskmaster.DebugAudio)
                            {
                                Serilog.Log.Debug("<Audio> {Name} (#{Pid}) Volume: {Volume} – Already correct (Plan: {Plan})",
                                                  info.Name, pid, string.Format("{0:N1}%", volume * 100), prc.VolumeStrategy.ToString());
                            }
                        }
                    }
                    else
                    {
                        if (Taskmaster.ShowInaction && Taskmaster.DebugAudio)
                        {
                            Serilog.Log.Debug("<Audio> {Name} (#{Pid}) Volume: {Volume} – not watched: {Path}",
                                              info.Name, pid, string.Format("{0:N1}%", volume * 100), info.Path);
                        }
                    }
                }
                else
                {
                    Serilog.Log.Debug("<Audio> Failed to get info for session (#{Pid})", pid);
                }
            }
            catch (Exception ex)
            {
                Logging.Stacktrace(ex);
            }
        }
Ejemplo n.º 2
0
 public AudioSession(NAudio.CoreAudioApi.AudioSessionControl audiosession)
 {
     session = audiosession;
 }