refactor to remove CoreAudio nuget package and using microsoft's APIs directly to resolve memory leak

This commit is contained in:
2023-09-16 15:34:45 -06:00
parent f9b23a62a3
commit ceb3494e43
9 changed files with 493 additions and 116 deletions

View File

@ -1,33 +1,46 @@
using CoreAudio;
using System;
using System;
using System.Runtime.InteropServices;
namespace FocusVolumeControl.AudioSessions;
internal class SystemSoundsAudioSession : IAudioSession
internal sealed class SystemSoundsAudioSession : IAudioSession
{
public SystemSoundsAudioSession(SimpleAudioVolume volumeControl)
public SystemSoundsAudioSession(IAudioSessionControl2 sessionControl)
{
_volumeControl = volumeControl;
_sessionControl = sessionControl;
_volumeControl = (ISimpleAudioVolume)sessionControl;
}
SimpleAudioVolume _volumeControl;
IAudioSessionControl2 _sessionControl;
ISimpleAudioVolume _volumeControl;
public string DisplayName => "System sounds";
public string GetIcon() => "Images/systemSounds";
public void ToggleMute()
{
_volumeControl.Mute = !_volumeControl.Mute;
var guid = Guid.Empty;
_volumeControl.SetMute(!IsMuted(), ref guid);
}
public bool IsMuted() => _volumeControl.Mute;
public bool IsMuted()
{
_volumeControl.GetMute(out var mute);
return mute;
}
public void IncrementVolumeLevel(int step, int ticks)
{
var level = VolumeHelpers.GetAdjustedVolume(_volumeControl.MasterVolume, step, ticks);
_volumeControl.MasterVolume = level;
_volumeControl.GetMasterVolume(out var level);
level = VolumeHelpers.GetAdjustedVolume(level, step, ticks);
var guid = Guid.Empty;
_volumeControl.SetMasterVolume(level, ref guid);
}
public int GetVolumeLevel() => VolumeHelpers.GetVolumePercentage(_volumeControl.MasterVolume);
public int GetVolumeLevel()
{
_volumeControl.GetMasterVolume(out var level);
return VolumeHelpers.GetVolumePercentage(level);
}
}