-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAudioSessionViewModel.cs
More file actions
96 lines (85 loc) · 2.47 KB
/
Copy pathAudioSessionViewModel.cs
File metadata and controls
96 lines (85 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System.ComponentModel;
using System.Runtime.CompilerServices;
using NAudio.CoreAudioApi;
namespace ActiveWindowMuteToggle
{
/// <summary>
/// ViewModel for displaying an audio session in the UI
/// </summary>
public class AudioSessionViewModel : INotifyPropertyChanged
{
private float _volume;
private bool _isPriority;
private float _peakLevel;
public AudioSessionControl Session { get; }
public uint ProcessId { get; }
public string ProcessName { get; }
public string DisplayName => $"{ProcessName} (PID: {ProcessId})";
public float Volume
{
get => _volume;
set
{
if (Math.Abs(_volume - value) > 0.001f)
{
_volume = value;
OnPropertyChanged();
OnPropertyChanged(nameof(VolumePercent));
}
}
}
public int VolumePercent => (int)(_volume * 100);
public float PeakLevel
{
get => _peakLevel;
set
{
if (Math.Abs(_peakLevel - value) > 0.001f)
{
_peakLevel = value;
OnPropertyChanged();
}
}
}
public bool IsPriority
{
get => _isPriority;
set
{
if (_isPriority != value)
{
_isPriority = value;
OnPropertyChanged();
}
}
}
public AudioSessionViewModel(AudioSessionControl session, uint processId, string processName)
{
Session = session;
ProcessId = processId;
ProcessName = processName;
UpdateVolume();
}
public void UpdateVolume()
{
try
{
Volume = Session.SimpleAudioVolume.Volume;
}
catch { }
}
public void UpdatePeakLevel()
{
try
{
PeakLevel = Session.AudioMeterInformation.MasterPeakValue;
}
catch { }
}
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}