diff --git a/ABStemPlayer/ViewModels/PlaybackViewModel.cs b/ABStemPlayer/ViewModels/PlaybackViewModel.cs index 37eb609..c0bc8dc 100644 --- a/ABStemPlayer/ViewModels/PlaybackViewModel.cs +++ b/ABStemPlayer/ViewModels/PlaybackViewModel.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.ComponentModel; using System.Windows.Input; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; @@ -132,6 +133,41 @@ public sealed partial class PlaybackViewModel : ObservableObject await _engine.PlayAsync(); } + partial void OnMixerChanged(MixerViewModel? oldValue, MixerViewModel newValue) + { + if (oldValue != null) + { + foreach (var stem in oldValue.Stems) + { + stem.PropertyChanged -= OnMixerSettingsChanged; + } + } + if (newValue != null) + { + foreach (var stem in newValue.Stems) + { + stem.PropertyChanged += OnMixerSettingsChanged; + } + } + } + + private void OnMixerSettingsChanged(object? sender, PropertyChangedEventArgs e) + { + if (sender is not StemChannelViewModel stem) + return; + + var mixerSettings = new MixerSettings + { + Stems = Mixer.Stems.Select(x => new StemMixSettings + { + GainDb = x.GainDb, + Enabled = x.Enabled, + Pan = x.Pan + }).ToList() + }; + Task.Run(async () => await _engine.UpdateMixerAsync(mixerSettings)); + } + partial void OnCurrentTimeChanged(TimeSpan value) { foreach (var band in Bands) diff --git a/ABStemPlayer/ViewModels/StemChannelViewModel.cs b/ABStemPlayer/ViewModels/StemChannelViewModel.cs index 563069d..238b4f1 100644 --- a/ABStemPlayer/ViewModels/StemChannelViewModel.cs +++ b/ABStemPlayer/ViewModels/StemChannelViewModel.cs @@ -4,9 +4,9 @@ public partial class StemChannelViewModel : ObservableObject { public StemType Type { get; } - [ObservableProperty] private bool _enabled = true; - [ObservableProperty] private float _gainDb = 0f; - [ObservableProperty] private float _pan = 0f; + [ObservableProperty] private bool _enabled = true; + [ObservableProperty] private float _gainDb; + [ObservableProperty] private float _pan; public StemChannelViewModel(StemType type) { diff --git a/AudioCore/Models/MixerSettings.cs b/AudioCore/Models/MixerSettings.cs index 620134a..d3a86a5 100644 --- a/AudioCore/Models/MixerSettings.cs +++ b/AudioCore/Models/MixerSettings.cs @@ -5,6 +5,8 @@ public sealed class StemMixSettings public bool Enabled { get; init; } = true; public float GainDb { get; init; } = 0f; public float Pan { get; init; } = 0f; // -1..+1 + + public override string ToString() => $"{(Enabled ? "[x]": "[ ]")} {GainDb:N2} {Pan:N2}"; } public sealed class MixerSettings