2023-09-16 15:34:45 -06:00
|
|
|
|
using System;
|
|
|
|
|
using System.Runtime.InteropServices;
|
2023-08-20 20:52:48 -06:00
|
|
|
|
|
|
|
|
|
namespace FocusVolumeControl.AudioSessions;
|
|
|
|
|
|
2023-09-16 15:34:45 -06:00
|
|
|
|
internal sealed class SystemVolumeAudioSession : IAudioSession
|
2023-08-20 20:52:48 -06:00
|
|
|
|
{
|
2023-09-16 15:34:45 -06:00
|
|
|
|
public SystemVolumeAudioSession(IAudioEndpointVolume volumeControl)
|
2023-08-20 20:52:48 -06:00
|
|
|
|
{
|
|
|
|
|
_volumeControl = volumeControl;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-16 15:34:45 -06:00
|
|
|
|
IAudioEndpointVolume _volumeControl;
|
2023-08-20 20:52:48 -06:00
|
|
|
|
|
|
|
|
|
public string DisplayName => "System Volume";
|
2023-08-21 23:20:24 -06:00
|
|
|
|
public string GetIcon() => "Images/encoderIcon";
|
2023-08-20 20:52:48 -06:00
|
|
|
|
|
|
|
|
|
public void ToggleMute()
|
|
|
|
|
{
|
2023-09-16 15:34:45 -06:00
|
|
|
|
_volumeControl.SetMute(!IsMuted(), Guid.Empty);
|
2023-08-20 20:52:48 -06:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-16 15:34:45 -06:00
|
|
|
|
public bool IsMuted()
|
|
|
|
|
{
|
|
|
|
|
_volumeControl.GetMute(out var mute);
|
|
|
|
|
return mute;
|
|
|
|
|
}
|
2023-08-20 20:52:48 -06:00
|
|
|
|
|
|
|
|
|
public void IncrementVolumeLevel(int step, int ticks)
|
|
|
|
|
{
|
2023-09-16 15:34:45 -06:00
|
|
|
|
_volumeControl.GetMasterVolumeLevelScalar(out var level);
|
|
|
|
|
level = VolumeHelpers.GetAdjustedVolume(level, step, ticks);
|
|
|
|
|
_volumeControl.SetMasterVolumeLevelScalar(level, Guid.Empty);
|
2023-08-20 20:52:48 -06:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-16 15:34:45 -06:00
|
|
|
|
public int GetVolumeLevel()
|
|
|
|
|
{
|
|
|
|
|
_volumeControl.GetMasterVolumeLevelScalar(out var level);
|
|
|
|
|
return VolumeHelpers.GetVolumePercentage(level);
|
|
|
|
|
}
|
2023-08-20 20:52:48 -06:00
|
|
|
|
}
|