Make sure sessions get removed and add more logging
Deploy to Gitea Releases / deploy-to-gitea-releases (push) Successful in 37s
Deploy to Gitea Releases / deploy-to-gitea-releases (push) Successful in 37s
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user