Files
WorkIndicator/Audio/AudioSession.cs
T
ckaczor a55ef1f27e
Deploy to Gitea Releases / deploy-to-gitea-releases (push) Successful in 37s
Make sure sessions get removed and add more logging
2026-08-25 15:42:24 -04:00

70 lines
2.3 KiB
C#

using NAudio.CoreAudioApi;
using NAudio.CoreAudioApi.Interfaces;
using Serilog;
using System;
namespace WorkIndicator.Audio;
internal class AudioSession : IAudioSessionEventsHandler
{
private readonly ILogger _logger;
private readonly AudioSessionControl _audioSessionControl;
public string Id { get; }
public string FriendlyName { get; }
public delegate void AudioSessionChangedDelegate(string id, AudioSessionState state);
public event AudioSessionChangedDelegate AudioSessionChanged;
public AudioSession(AudioSessionControl audioSessionControl, string friendlyName)
{
_logger = Log.ForContext<AudioSession>();
_audioSessionControl = audioSessionControl;
Id = audioSessionControl.GetSessionIdentifier;
FriendlyName = friendlyName;
audioSessionControl.RegisterEventClient(this);
}
public AudioSessionState State => _audioSessionControl.State;
void IAudioSessionEventsHandler.OnVolumeChanged(float volume, bool isMuted)
{
_logger.Information("OnVolumeChanged: {name} {volume} {isMuted}", FriendlyName, volume, isMuted);
}
void IAudioSessionEventsHandler.OnDisplayNameChanged(string displayName)
{
_logger.Information("OnDisplayNameChanged: {name}", displayName);
}
void IAudioSessionEventsHandler.OnIconPathChanged(string iconPath)
{
_logger.Information("OnIconPathChanged: {path}", iconPath);
}
void IAudioSessionEventsHandler.OnChannelVolumeChanged(uint channelCount, IntPtr newVolumes, uint channelIndex)
{
_logger.Information("OnChannelVolumeChanged: {channelCount} {newVolumes} {channelIndex}", channelCount, newVolumes, channelIndex);
}
void IAudioSessionEventsHandler.OnGroupingParamChanged(ref Guid groupingId)
{
_logger.Information("OnGroupingParamChanged: {groupingId}", groupingId);
}
void IAudioSessionEventsHandler.OnStateChanged(AudioSessionState state)
{
_logger.Information("OnStateChanged: {state}", state);
AudioSessionChanged?.Invoke(Id, state);
}
void IAudioSessionEventsHandler.OnSessionDisconnected(AudioSessionDisconnectReason disconnectReason)
{
_logger.Information("OnSessionDisconnected: {disconnectReason}", disconnectReason);
}
}