using NAudio.Dsp; using QuikDawEditor.MiscClasses; using QuikDawEditor.Properties; using QuikDawEditor.SampleProviders; using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Text.Json.Serialization; using System.Windows.Media; using static QuikDawEditor.EDITING.StaticProperties; namespace QuikDawEditor.EditingClasses; public partial class Track : INotifyPropertyChanged { public Track(TrackType trkType) { this.UndoTrackID = Guid.NewGuid().ToString(); Volume = 1; Pan = 0; trackType = trkType; switch (trkType) { case TrackType.Audio: //#9B6432 TrackBackgroundColor = (Color)ColorConverter.ConvertFromString(Settings.Default.DefaultAudioTrackColor); break; case TrackType.Midi: //#5270A2 TrackBackgroundColor = (Color)ColorConverter.ConvertFromString(Settings.Default.DefaultMidiTrackColor); break; case TrackType.Submix: //#808080 TrackBackgroundColor = (Color)ColorConverter.ConvertFromString(Settings.Default.DefaultSubmixTrackColor); break; } //m_panStrategy = new SinPanStrategy(); //multipliers = m_panStrategy.GetMultipliers(Pan); if (myTrackSampleProvider == null) { myTrackSampleProvider = new TrackSampleProvider(); myTrackSampleProvider.myTrack = this; } EQBands = new EqualizerBand[] { new EqualizerBand {Bandwidth = 0.8f, Frequency = 100, Gain = 0}, new EqualizerBand {Bandwidth = 0.8f, Frequency = 200, Gain = 0}, new EqualizerBand { Bandwidth = 0.8f, Frequency = 400, Gain = 0 }, new EqualizerBand { Bandwidth = 0.8f, Frequency = 800, Gain = 0 }, new EqualizerBand { Bandwidth = 0.8f, Frequency = 1200, Gain = 0 }, new EqualizerBand { Bandwidth = 0.8f, Frequency = 2400, Gain = 0 }, new EqualizerBand { Bandwidth = 0.8f, Frequency = 4800, Gain = 0 }, new EqualizerBand { Bandwidth = 0.8f, Frequency = 9600, Gain = 0 }, }; bandCount = EQBands.Length; filters = new BiQuadFilter[2, EQBands.Length]; CreateFilters(); AddHandlers(); double setAutoWidthMs = 10000; if (AutomationLanes.Count == 0) { AutomationLanes.Add(new AutomationLane("Volume", 0, 2, this)); AutomationLanes.Add(new AutomationLane("Pan", -1, 1, this)); foreach (AutomationLane autoclip in AutomationLanes) { if (autoclip.autoPoints.Count == 0) { autoclip.autoPoints = new ObservableCollection() { new AutoPoint() { sourcePointms = 0, AutoValue = autoclip.MidValue, IsLeftEdgeAutoPoint = true }, new AutoPoint() { sourcePointms = setAutoWidthMs, AutoValue = autoclip.MidValue, IsRightEdgeAutoPoint = true } }; } autoclip.ReverseTransformFactorX = 1 / editingProject.ViewXZoomFac; autoclip.NotifyAutoPointsChanged(); } } SelectedAutomationLaneIndex = 0; } [JsonConstructor] public Track(string TrackName, TrackType trackType, EqualizerBand[] EQBands, ObservableCollection AutomationLanes, ObservableCollection SubTracks, ObservableCollection Clips, double TrackHeight) { if (string.IsNullOrEmpty(UndoTrackID)) this.UndoTrackID = Guid.NewGuid().ToString(); else this.UndoTrackID = UndoTrackID; this.TrackHeight = TrackHeight== 0 ? 80 : TrackHeight; this.Clips = Clips; this.TrackName = TrackName; this.trackType = trackType; this.EQBands = EQBands; bandCount = EQBands.Length; filters = new BiQuadFilter[2, EQBands.Length]; CreateFilters(); this.AutomationLanes = AutomationLanes; this.SubTracks = (SubTracks == null ? new ObservableCollection() : SubTracks); if (myTrackSampleProvider == null) myTrackSampleProvider = new TrackSampleProvider() ; foreach (AutomationLane alane in this.AutomationLanes) { alane.ReverseTransformFactorX = 1 / editingProject.ViewXZoomFac; alane.myTrack = this; } foreach (Track subtrack in this.SubTracks) subtrack.parentTrack = this; foreach (Clip c in this.Clips) { c.myTrack = this; c.NotifyGainPointsChanged(); c.RecreateClipUnitBackgrounds(); } AddHandlers(); //For backward compatibility: if (TrackBackgroundColor.ToString() == "#00000000") { switch (this.trackType) { case TrackType.Audio: TrackBackgroundColor = Color.FromRgb(155, 100, 50); break; case TrackType.Midi: TrackBackgroundColor = Color.FromArgb(220, 82, 112, 162); break; case TrackType.Submix: TrackBackgroundColor = Color.FromRgb(80, 80, 80); break; } } } }