예제 #1
0
파일: Winds.cs 프로젝트: notator/Moritz
        /// <summary>
        /// Returns a VoiceDef containing clones of the UniqueDefs in the originalVoiceDef argument,
        /// rotated so that the original first IUniqueDef is positioned close to rotationMsPosition.
        /// </summary>
        /// <param name="originalVoiceDef"></param>
        /// <returns></returns>
        private Trk GetRotatedWind(int midiChannel, Trk originalVoiceDef, int rotationMsPosition)
        {
            Trk tempWind = originalVoiceDef.Clone();
            tempWind.MidiChannel = midiChannel;

            int finalBarlineMsPosition = originalVoiceDef.EndMsPosition;
            int msDurationAfterSynch = finalBarlineMsPosition - rotationMsPosition;

            List<IUniqueDef> originalLmdds = tempWind.UniqueDefs;
            List<IUniqueDef> originalStartLmdds = new List<IUniqueDef>();
            List<IUniqueDef> newWindLmdds = new List<IUniqueDef>();
            int accumulatingMsDuration = 0;
            for(int i = 0; i < tempWind.Count; ++i)
            {
                if(accumulatingMsDuration < msDurationAfterSynch)
                {
                    originalStartLmdds.Add(originalLmdds[i]);
                    accumulatingMsDuration += originalLmdds[i].MsDuration;
                }
                else
                {
                    newWindLmdds.Add(originalLmdds[i]);
                }
            }
            newWindLmdds.AddRange(originalStartLmdds);

            int msPosition = 0;
            foreach(IUniqueDef iu in newWindLmdds)
            {
                iu.MsPositionReTrk = msPosition;
                msPosition += iu.MsDuration;
            }
            Trk newRotatedWind = new Trk(midiChannel, newWindLmdds);

            return newRotatedWind;
        }
예제 #2
0
파일: Furies3.cs 프로젝트: notator/Moritz
 private Trk GetNextFlutterSequence(Trk existingFlutter, double factor, int transposition)
 {
     Trk nextFlutter = existingFlutter.Clone();
     nextFlutter.AdjustVelocities(factor);
     nextFlutter.AdjustMsDurations(factor);
     nextFlutter.AdjustRestMsDurations(factor);
     nextFlutter.Transpose(transposition);
     return nextFlutter;
 }