private List <VoiceDef> WriteLowerStaff(int staffNumber, List <VoiceDef> topStaffBars) { List <VoiceDef> consecutiveBars = new List <VoiceDef>(); Krystal krystal = _krystals[staffNumber - 1]; Palette palette = _palettes[staffNumber - 1]; List <List <int> > strandValuesList = krystal.GetValues(krystal.Level); Debug.Assert(topStaffBars.Count == strandValuesList.Count); for (int barIndex = 0; barIndex < strandValuesList.Count; barIndex++) { VoiceDef topStaffVoice = topStaffBars[barIndex]; VoiceDef newVoice = new TrkDef((byte)(staffNumber - 1), new List <IUniqueDef>()); int currentMsPosition = topStaffVoice.UniqueDefs[0].MsPosition; List <int> lowerStaffValueSequence = strandValuesList[barIndex]; List <int> lowerStaffMsDurations = LowerStaffMsDurations(topStaffVoice, lowerStaffValueSequence.Count); for (int valueIndex = 0; valueIndex < lowerStaffValueSequence.Count; valueIndex++) { int value = lowerStaffValueSequence[valueIndex]; IUniqueDef noteDef = palette.UniqueDurationDef(value - 1); noteDef.MsDuration = lowerStaffMsDurations[valueIndex]; noteDef.MsPosition = currentMsPosition; currentMsPosition += noteDef.MsDuration; newVoice.UniqueDefs.Add(noteDef); } consecutiveBars.Add(newVoice); } return(consecutiveBars); }
/// <summary> /// Returns a dictionary containing the current transposition per msPosition /// ( Dictionary[msPositon, transposition] ) /// </summary> /// <returns></returns> public Dictionary <int, int> SetFinalMelody(Krystal mod7krys, Krystal mod12krys) { int f4Interlude4Index = 42; int f4PostludeIndex = 59; int f4finalPhaseIndex = 73; List <int> mod7Values = mod7krys.GetValues(1)[0]; List <int> mod12Values = mod12krys.GetValues(1)[0]; // circle of fifths hierarchy (mod 12): 0 7 4 2 10 9 3 4 8 11 1 6 // rearranged for mod7krys hierarchy (4536271) int[] transpositionArray1 = { 3, -2, 4, 0, 4, 2, -3 }; // 7 changed to 4 (was too high!) // circle of fifths hierarchy centred on 0: int[] transpositionArray2 = { 0, 4, 4, 2, -2, -3, 3, 4, -4, -1, 1, 6 }; // 7 changed to 4 (was too high!) // widened int[] transpositionArray3 = { 0, 9, 4, 4, -2, -5, 6, 8, -7, -2, 2, 11 }; Dictionary <int, int> msPosTranspositionDict = new Dictionary <int, int>(); int transposition; int valueIndex = 0; for (int i = f4Interlude4Index; i < f4PostludeIndex; ++i) { MidiChordDef umcd = this[i] as MidiChordDef; if (umcd != null) { transposition = transpositionArray1[mod7Values[valueIndex++] - 1]; umcd.Transpose(transposition); msPosTranspositionDict.Add(umcd.MsPosition, transposition); } } valueIndex = 0; for (int i = f4PostludeIndex; i < f4finalPhaseIndex; ++i) { MidiChordDef umcd = this[i] as MidiChordDef; if (umcd != null) { transposition = transpositionArray2[mod12Values[valueIndex++] - 1]; umcd.Transpose(transposition); msPosTranspositionDict.Add(umcd.MsPosition, transposition); } } valueIndex = 0; for (int i = f4finalPhaseIndex; i < this.Count; ++i) { MidiChordDef umcd = this[i] as MidiChordDef; if (umcd != null) { transposition = transpositionArray3[mod12Values[valueIndex++] - 1]; umcd.Transpose(transposition); msPosTranspositionDict.Add(umcd.MsPosition, transposition); } } return(msPosTranspositionDict); }
/// <summary> /// Returns a dictionary containing the current transposition per msPosition /// ( Dictionary[msPositon, transposition] ) /// </summary> /// <returns></returns> public Dictionary<int, int> SetFinalMelody(Krystal mod7krys, Krystal mod12krys) { int f4Interlude4Index = 42; int f4PostludeIndex = 59; int f4finalPhaseIndex = 73; List<int> mod7Values = mod7krys.GetValues(1)[0]; List<int> mod12Values = mod12krys.GetValues(1)[0]; // circle of fifths hierarchy (mod 12): 0 7 4 2 10 9 3 4 8 11 1 6 // rearranged for mod7krys hierarchy (4536271) int[] transpositionArray1 = { 3, -2, 4, 0, 4, 2, -3 }; // 7 changed to 4 (was too high!) // circle of fifths hierarchy centred on 0: int[] transpositionArray2 = { 0, 4, 4, 2, -2, -3, 3, 4, -4, -1, 1, 6 }; // 7 changed to 4 (was too high!) // widened int[] transpositionArray3 = { 0, 9, 4, 4, -2, -5, 6, 8, -7, -2, 2, 11 }; Dictionary<int, int> msPosTranspositionDict = new Dictionary<int, int>(); int transposition; int valueIndex = 0; for(int i = f4Interlude4Index; i < f4PostludeIndex; ++i) { MidiChordDef umcd = this[i] as MidiChordDef; if(umcd != null) { transposition = transpositionArray1[mod7Values[valueIndex++] - 1]; umcd.Transpose(transposition); msPosTranspositionDict.Add(umcd.MsPositionReTrk, transposition); } } valueIndex = 0; for(int i = f4PostludeIndex; i < f4finalPhaseIndex; ++i) { MidiChordDef umcd = this[i] as MidiChordDef; if(umcd != null) { transposition = transpositionArray2[mod12Values[valueIndex++] - 1]; umcd.Transpose(transposition); msPosTranspositionDict.Add(umcd.MsPositionReTrk, transposition); } } valueIndex = 0; for(int i = f4finalPhaseIndex; i < this.Count; ++i) { MidiChordDef umcd = this[i] as MidiChordDef; if(umcd != null) { transposition = transpositionArray3[mod12Values[valueIndex++] - 1]; umcd.Transpose(transposition); msPosTranspositionDict.Add(umcd.MsPositionReTrk, transposition); } } return msPosTranspositionDict; }
public Trk NewTrk(int midiChannel, int msPositionReContainer, Krystal krystal) { List<int> sequence = krystal.GetValues((uint)1)[0]; return NewTrk(midiChannel, msPositionReContainer, sequence); }
public TrkDef NewTrkDef(byte midiChannel, Krystal krystal) { List<int> sequence = krystal.GetValues((uint)1)[0]; return NewTrkDef(midiChannel, sequence); }
public TrkDef NewTrkDef(byte midiChannel, Krystal krystal) { List <int> sequence = krystal.GetValues((uint)1)[0]; return(NewTrkDef(midiChannel, sequence)); }