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();