add volume

This commit is contained in:
Oleksandr Bezdieniezhnykh
2024-05-26 15:11:16 +03:00
parent f179a5f0ca
commit e317ce2310
6 changed files with 167 additions and 20 deletions
+57 -3
View File
@@ -1,4 +1,5 @@
using System.IO;
using System.Windows;
using System.Windows.Input;
using Azaion.Annotator.DTO;
using LibVLCSharp.Shared;
@@ -9,7 +10,8 @@ namespace Azaion.Annotator;
public class PlayerControlHandler(LibVLC libVLC, MediaPlayer mediaPlayer, MainWindow mainWindow, FormState formState, Config config) :
INotificationHandler<KeyEvent>,
INotificationHandler<AnnClassSelectedEvent>,
INotificationHandler<PlaybackControlEvent>
INotificationHandler<PlaybackControlEvent>,
INotificationHandler<VolumeChangedEvent>
{
private const int STEP = 20;
private const int LARGE_STEP = 5000;
@@ -58,8 +60,35 @@ public class PlayerControlHandler(LibVLC libVLC, MediaPlayer mediaPlayer, MainWi
if (KeysControlEnumDict.TryGetValue(key, out var value))
await ControlPlayback(value);
await VolumeControl(key);
}
private async Task VolumeControl(Key key)
{
switch (key)
{
case Key.VolumeMute when mediaPlayer.Volume == 0:
await ControlPlayback(PlaybackControlEnum.TurnOnVolume);
break;
case Key.VolumeMute:
await ControlPlayback(PlaybackControlEnum.TurnOffVolume);
break;
case Key.Up:
case Key.VolumeUp:
var vUp = Math.Min(100, mediaPlayer.Volume + 5);
ChangeVolume(vUp);
mainWindow.Volume.Value = vUp;
break;
case Key.Down:
case Key.VolumeDown:
var vDown = Math.Max(0, mediaPlayer.Volume - 5);
ChangeVolume(vDown);
mainWindow.Volume.Value = vDown;
break;
}
}
public async Task Handle(PlaybackControlEvent notification, CancellationToken cancellationToken)
{
await ControlPlayback(notification.PlaybackControl);
@@ -87,10 +116,12 @@ public class PlayerControlHandler(LibVLC libVLC, MediaPlayer mediaPlayer, MainWi
case PlaybackControlEnum.PreviousFrame:
mediaPlayer.SetPause(true);
mediaPlayer.Time -= step;
mainWindow.VideoSlider.Value = mediaPlayer.Position * 100;
break;
case PlaybackControlEnum.NextFrame:
mediaPlayer.SetPause(true);
mediaPlayer.Time += step;
mainWindow.VideoSlider.Value = mediaPlayer.Position * 100;
break;
case PlaybackControlEnum.SaveAnnotations:
await SaveAnnotations();
@@ -101,6 +132,17 @@ public class PlayerControlHandler(LibVLC libVLC, MediaPlayer mediaPlayer, MainWi
case PlaybackControlEnum.RemoveAllAnns:
mainWindow.Editor.RemoveAllAnns();
break;
case PlaybackControlEnum.TurnOnVolume:
mainWindow.TurnOnVolumeBtn.Visibility = Visibility.Collapsed;
mainWindow.TurnOffVolumeBtn.Visibility = Visibility.Visible;
mediaPlayer.Volume = formState.CurrentVolume;
break;
case PlaybackControlEnum.TurnOffVolume:
mainWindow.TurnOffVolumeBtn.Visibility = Visibility.Collapsed;
mainWindow.TurnOnVolumeBtn.Visibility = Visibility.Visible;
formState.CurrentVolume = mediaPlayer.Volume;
mediaPlayer.Volume = 0;
break;
case PlaybackControlEnum.None:
break;
default:
@@ -108,6 +150,18 @@ public class PlayerControlHandler(LibVLC libVLC, MediaPlayer mediaPlayer, MainWi
}
}
public async Task Handle(VolumeChangedEvent notification, CancellationToken cancellationToken)
{
ChangeVolume(notification.Volume);
await Task.CompletedTask;
}
private void ChangeVolume(int volume)
{
formState.CurrentVolume = volume;
mediaPlayer.Volume = volume;
}
private void Play()
{
if (mainWindow.LvFiles.SelectedItem == null)
@@ -145,4 +199,4 @@ public class PlayerControlHandler(LibVLC libVLC, MediaPlayer mediaPlayer, MainWi
mainWindow.Editor.RemoveAllAnns();
mediaPlayer.Play();
}
}
}