private Trk GetF1Postlude(Palette f1PostludePalette, Krystal krystal, List<int> strandIndices, Dictionary<string, int> msPositions) { Trk f1p = f1PostludePalette.NewTrk(this.MidiChannel, krystal); List<int> f1eStrandDurations = GetStrandDurations(f1p, strandIndices); for(int i = f1p.Count - 1; i > 0; --i) { if(strandIndices.Contains(i)) { RestDef umrd = new RestDef(f1p[i].MsPositionReTrk, f1eStrandDurations[strandIndices.IndexOf(i)] / 4); f1p.Insert(i, umrd); } } f1p.MsPositionReSeq = msPositions["postlude"]; f1p.RemoveBetweenMsPositions(msPositions["endOfPiece"], int.MaxValue); return f1p; }
private Trk GetF1FinalePart1(Palette palette, Krystal krystal, List<int> strandIndices, Dictionary<string, int> msPositions) { Trk f1FinalePart1 = palette.NewTrk(0, krystal); List<int> f1eStrandDurations = GetStrandDurations(f1FinalePart1, strandIndices); int extraTime = 1000; int diff = extraTime / f1FinalePart1.Count; for(int i = f1FinalePart1.Count - 1; i > 0; --i) { if(strandIndices.Contains(i)) { RestDef umrd = new RestDef(f1FinalePart1[i].MsPositionReTrk, f1eStrandDurations[strandIndices.IndexOf(i)] + extraTime); extraTime -= diff; f1FinalePart1.Insert(i, umrd); } } f1FinalePart1.MsPositionReSeq = msPositions["interlude3Bar2"]; f1FinalePart1.RemoveBetweenMsPositions(msPositions["verse4EsCaped"], int.MaxValue); if(f1FinalePart1[f1FinalePart1.Count - 1] is RestDef) { f1FinalePart1[f1FinalePart1.Count - 1].MsDuration = msPositions["verse4EsCaped"] - f1FinalePart1[f1FinalePart1.Count - 1].MsPositionReTrk; } return f1FinalePart1; }
private Trk GetF1FinalePart2(Palette f1FinalePalette2, Krystal krystal, List<int> strandIndices, Dictionary<string, int> msPositions) { Trk f1FinalePart2 = f1FinalePalette2.NewTrk(this.MidiChannel, krystal); List<int> f1eStrandDurations = GetStrandDurations(f1FinalePart2, strandIndices); int extraTime = 500; int diff = extraTime / f1FinalePart2.Count; for(int i = f1FinalePart2.Count - 1; i > 0; --i) { if(strandIndices.Contains(i)) { RestDef umrd = new RestDef(f1FinalePart2[i].MsPositionReTrk, f1eStrandDurations[strandIndices.IndexOf(i)] + extraTime); extraTime -= diff; f1FinalePart2.Insert(i, umrd); } } f1FinalePart2.MsPositionReSeq = msPositions["verse4EsCaped"]; f1FinalePart2.RemoveBetweenMsPositions(msPositions["verse5Calls"], int.MaxValue); if(f1FinalePart2[f1FinalePart2.Count - 1] is RestDef) { f1FinalePart2[f1FinalePart2.Count - 1].MsDuration = msPositions["postlude"] - f1FinalePart2[f1FinalePart2.Count - 1].MsPositionReTrk; } return f1FinalePart2; }
private Trk GetWind3(int midiChannel, Palette palette, Krystal krystal) { Trk wind3 = palette.NewTrk(midiChannel, krystal); wind3.Transpose(0, wind3.Count, -13); wind3.StepwiseGliss(74, wind3.Count, 19); return wind3; }