예제 #1
0
        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);
        }
예제 #2
0
파일: Furies4.cs 프로젝트: suvjunmd/Moritz
        /// <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);
        }
예제 #3
0
파일: Furies4.cs 프로젝트: notator/Moritz
        /// <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;
        }
예제 #4
0
파일: Palette.cs 프로젝트: notator/Moritz
 public Trk NewTrk(int midiChannel, int msPositionReContainer, Krystal krystal)
 {
     List<int> sequence = krystal.GetValues((uint)1)[0];
     return NewTrk(midiChannel, msPositionReContainer, sequence);
 }
예제 #5
0
파일: Palette.cs 프로젝트: suvjunmd/Moritz
 public TrkDef NewTrkDef(byte midiChannel, Krystal krystal)
 {
     List<int> sequence = krystal.GetValues((uint)1)[0];
     return NewTrkDef(midiChannel, sequence);
 }
예제 #6
0
        public TrkDef NewTrkDef(byte midiChannel, Krystal krystal)
        {
            List <int> sequence = krystal.GetValues((uint)1)[0];

            return(NewTrkDef(midiChannel, sequence));
        }