public MusicSegmentViewModel AddMusicSegment() { var newSegment = new MusicSegment(model) { Label = "Unnamed", Bpm = 120, BeatsPerBar = 4, TimeOrigin = 0 }; model.MusicSegments.Add(newSegment); // should be logically equivalent to MusicSegments.Last() return(MusicSegments.Single(segVm => segVm.GetModel() == newSegment)); }
public XElement ToXML(string relativePathBase = null) { if (MusicSegments.Count < 1 || !MusicSegments[0].IsReadOnly) { throw new Exception("the default segment somehow managed to disappear from slot 0"); } return(new XElement("timeline", MusicFileToXML(relativePathBase), new XElement("segments", MusicSegments.Skip(1).Select(s => s.ToXML()).ToArray()), new XElement("default-segment", DefaultMusicSegment.GetIndex()), new XElement("tracks", Tracks.Select(g => g.ToXML()).ToArray()), new XElement("blocks", Blocks.Select(b => b.ToXML()).ToArray()), new XElement("notes", Notes.Select(n => n.ToXML()).ToArray()) )); }
public void SetupTestData() { // test data MusicSegments.Add(new MusicSegment(this) { Label = "Mah segment #1", Bpm = 128, BeatsPerBar = 4, TimeOrigin = 0 }); MusicSegments.Add(new MusicSegment(this) { Label = "Slow segment", Bpm = 96, BeatsPerBar = 3, TimeOrigin = 10 }); MusicSegments.Add(new MusicSegment(this) { Label = "D&B example", Bpm = 180, BeatsPerBar = 4, TimeOrigin = 20 }); DefaultMusicSegment = MusicSegments[1]; Tracks.Add(new Track(this, "Second track")); Tracks.Add(new Track(this, "Third track")); Blocks.Add(new ColorBlock(this, Tracks[0]) { StartTime = 0f, Duration = 0.5f, Color = GloColor.FromRGB(255, 0, 0), SegmentContext = MusicSegments[0] }); Blocks.Add(new ColorBlock(this, Tracks[0]) { StartTime = 1f, Duration = 0.5f, Color = GloColor.FromRGB(255, 127, 0), SegmentContext = MusicSegments[0] }); Blocks.Add(new RampBlock(this, Tracks[0]) { StartTime = 2f, Duration = 2f, StartColor = GloColor.FromRGB(255, 127, 0), EndColor = GloColor.White, SegmentContext = MusicSegments[0] }); Blocks.Add(new ColorBlock(this, Tracks[1], Tracks[2]) { StartTime = 0.5f, Duration = 2.5f, Color = GloColor.White }); Blocks.Add(new ColorBlock(this, Tracks[2]) { StartTime = 4f, Duration = 1f, Color = GloColor.FromRGB(0, 255, 120) }); Blocks.Add(new LoopBlock(this) { StartTime = 4.5f, Duration = 3f, SegmentContext = MusicSegments[0] } .AddChild(new ColorBlock(this, Tracks[0]) { StartTime = 0, Duration = 1.25f, Color = GloColor.FromRGB(0, 0, 255), SegmentContext = MusicSegments[0] }, false) .AddChild(new ColorBlock(this, Tracks[0]) { StartTime = 1.5f, Duration = 1.5f, Color = GloColor.FromRGB(0, 255, 255), SegmentContext = MusicSegments[0] }, false) ); Notes.Add(new Note { Label = "First marker", Time = 0.5f }); Notes.Add(new Note { Label = "Second marker", Time = 1.446f }); Notes.Add(new Note { Label = "Third marker", Time = 3.0f, Description = "This one is super fancy and has a description.\r\nThe possibilities are endless!" }); Notes.Add(new Note { Time = 4f }); }