diff --git a/RedBookPlayer.Common/Hardware/Player.cs b/RedBookPlayer.Common/Hardware/Player.cs
index 585f5f4..0ae2563 100644
--- a/RedBookPlayer.Common/Hardware/Player.cs
+++ b/RedBookPlayer.Common/Hardware/Player.cs
@@ -389,6 +389,12 @@ namespace RedBookPlayer.Common.Hardware
/// True to enable loading data tracks, false otherwise
public void SetLoadDataTracks(bool load) => (_opticalDisc as CompactDisc)?.SetLoadDataTracks(load);
+ ///
+ /// Set the value for the volume
+ ///
+ /// New volume value
+ public void SetVolume(int volume) => _soundOutput?.SetVolume(volume);
+
///
/// Update the player from the current OpticalDisc
///
diff --git a/RedBookPlayer.Common/Hardware/SoundOutput.cs b/RedBookPlayer.Common/Hardware/SoundOutput.cs
index 2058a26..77104b3 100644
--- a/RedBookPlayer.Common/Hardware/SoundOutput.cs
+++ b/RedBookPlayer.Common/Hardware/SoundOutput.cs
@@ -303,6 +303,12 @@ namespace RedBookPlayer.Common.Hardware
///
public void SetDeEmphasis(bool apply) => ApplyDeEmphasis = apply;
+ ///
+ /// Set the value for the volume
+ ///
+ /// New volume value
+ public void SetVolume(int volume) => Volume = volume;
+
///
/// Sets or resets the de-emphasis filters
///
diff --git a/RedBookPlayer.GUI/PlayerViewModel.cs b/RedBookPlayer.Common/PlayerViewModel.cs
similarity index 95%
rename from RedBookPlayer.GUI/PlayerViewModel.cs
rename to RedBookPlayer.Common/PlayerViewModel.cs
index b3984d7..8e4cf5b 100644
--- a/RedBookPlayer.GUI/PlayerViewModel.cs
+++ b/RedBookPlayer.Common/PlayerViewModel.cs
@@ -2,7 +2,7 @@ using System.ComponentModel;
using ReactiveUI;
using RedBookPlayer.Common.Hardware;
-namespace RedBookPlayer.GUI
+namespace RedBookPlayer.Common
{
public class PlayerViewModel : ReactiveObject
{
@@ -170,7 +170,7 @@ namespace RedBookPlayer.GUI
public int Volume
{
get => _volume;
- set => this.RaiseAndSetIfChanged(ref _volume, value);
+ private set => this.RaiseAndSetIfChanged(ref _volume, value);
}
private bool? _playing;
@@ -270,6 +270,12 @@ namespace RedBookPlayer.GUI
/// True to enable loading data tracks, false otherwise
public void SetLoadDataTracks(bool load) => _player?.SetLoadDataTracks(load);
+ ///
+ /// Set the value for the volume
+ ///
+ /// New volume value
+ public void SetVolume(int volume) => _player?.SetVolume(volume);
+
///
/// Temporarily mute playback
///
@@ -278,11 +284,11 @@ namespace RedBookPlayer.GUI
if(_lastVolume == null)
{
_lastVolume = Volume;
- Volume = 0;
+ _player?.SetVolume(0);
}
else
{
- Volume = _lastVolume.Value;
+ _player?.SetVolume(_lastVolume.Value);
_lastVolume = null;
}
}
diff --git a/RedBookPlayer.GUI/MainWindow.xaml.cs b/RedBookPlayer.GUI/MainWindow.xaml.cs
index d95bb98..a04d83f 100644
--- a/RedBookPlayer.GUI/MainWindow.xaml.cs
+++ b/RedBookPlayer.GUI/MainWindow.xaml.cs
@@ -189,7 +189,7 @@ namespace RedBookPlayer.GUI
increment *= 5;
if(playerView?.PlayerViewModel?.Volume != null)
- playerView.PlayerViewModel.Volume += increment;
+ playerView.PlayerViewModel.SetVolume(playerView.PlayerViewModel.Volume + increment);
}
// Volume Down
@@ -202,7 +202,7 @@ namespace RedBookPlayer.GUI
decrement *= 5;
if (playerView?.PlayerViewModel?.Volume != null)
- playerView.PlayerViewModel.Volume -= decrement;
+ playerView.PlayerViewModel.SetVolume(playerView.PlayerViewModel.Volume - decrement);
}
// Mute Toggle
diff --git a/RedBookPlayer.GUI/PlayerView.xaml b/RedBookPlayer.GUI/PlayerView.xaml
index 9221ecd..ab9fcec 100644
--- a/RedBookPlayer.GUI/PlayerView.xaml
+++ b/RedBookPlayer.GUI/PlayerView.xaml
@@ -98,6 +98,7 @@
4CH
HIDDEN
HIDDEN
+
\ No newline at end of file
diff --git a/RedBookPlayer.GUI/PlayerView.xaml.cs b/RedBookPlayer.GUI/PlayerView.xaml.cs
index 1a31981..ef7d3b9 100644
--- a/RedBookPlayer.GUI/PlayerView.xaml.cs
+++ b/RedBookPlayer.GUI/PlayerView.xaml.cs
@@ -11,6 +11,7 @@ using Avalonia.Markup.Xaml;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using Avalonia.Threading;
+using RedBookPlayer.Common;
namespace RedBookPlayer.GUI
{
@@ -270,9 +271,9 @@ namespace RedBookPlayer.GUI
public void RewindButton_Click(object sender, RoutedEventArgs e) => PlayerViewModel.Rewind();
- public void VolumeUpButton_Click(object sender, RoutedEventArgs e) => PlayerViewModel.Volume++;
+ public void VolumeUpButton_Click(object sender, RoutedEventArgs e) => PlayerViewModel.SetVolume(PlayerViewModel.Volume + 1);
- public void VolumeDownButton_Click(object sender, RoutedEventArgs e) => PlayerViewModel.Volume--;
+ public void VolumeDownButton_Click(object sender, RoutedEventArgs e) => PlayerViewModel.SetVolume(PlayerViewModel.Volume - 1);
public void MuteToggleButton_Click(object sender, RoutedEventArgs e) => PlayerViewModel.ToggleMute();