コード例 #1
0
 public override void invert(int pitch, Tonality tonality)
 {
     foreach (Note n in this.noteList)
     {
         n.invert(pitch, tonality);
     }
 }
コード例 #2
0
 public override void modulate(Tonality oldTonality, int[] targetScale)
 {
     foreach (Note n in this.noteList)
     {
         n.modulate(oldTonality, targetScale);
     }
 }
コード例 #3
0
 public override void RachmaninoffInvert(int pitch, Tonality tonality)
 {
     foreach (Note n in this.noteList)
     {
         n.RachmaninoffInvert(pitch, tonality);
     }
 }
コード例 #4
0
 internal void harmonizate(Tonality tonality)
 {
     int[] scale = tonality.getScale();
     for (int i = 0; i < this.musicItemList.Count; i++)
     {
         MusicItem mi = musicItemList[i];
         if (mi.isChord())
         {
             continue;
         }
         Note  high  = (Note)mi;
         Chord chord = new Chord();
         chord.add(high);
         int found = 0;
         int pitch = high.getPitch() - 2; // Substracting 2 to avoid 2-intervals
         while (found < 2 && pitch > 0)
         {
             pitch--;
             if (tonality.isinTriad(pitch))
             {
                 chord.add(new Note(pitch, high.getDuration()));
                 found++;
             }
         }
         musicItemList[i] = chord;
     }
 }
コード例 #5
0
 public void modulate(Tonality oldTonality, int[] targetScale)
 {
     foreach (MusicItem mi in this.musicItemList)
     {
         mi.modulate(oldTonality, targetScale);
     }
 }
コード例 #6
0
        internal void RachmaninoffInvert()
        {
            foreach (Voice v in this.voiceList)
            {
                v.RachmaninoffInvert(tonality);
            }

            tonality = tonality.getRelative();
        }
コード例 #7
0
 private Motif(List <Voice> voiceList, int parentId, Variation variation, Tonality tonality, SortedList <Harmony, int> harmonyList)
 {
     this.voiceList   = voiceList;
     this.id          = Tune.generateMotifID();
     this.parentId    = parentId;
     this.variation   = variation;
     this.tonality    = tonality;
     this.name        = "";
     this.harmonyList = harmonyList;
 }
コード例 #8
0
 /**
  * New motif
  **/
 public Motif()
 {
     this.voiceList   = new List <Voice>();
     this.id          = Tune.generateMotifID();
     this.parentId    = -1;
     this.variation   = new NullVariation();
     this.tonality    = new Tonality();
     this.name        = "";
     this.harmonyList = new SortedList <Harmony, int>();
 }
コード例 #9
0
        internal void modulate(Tonality newTonality)
        {
            Tonality oldTonality = this.tonality;

            this.tonality = newTonality;

            int[] oldScale = oldTonality.getScale();
            int[] newScale = newTonality.getScale();
            int[] oldTriad = oldTonality.getTriad();
            int[] newTriad = newTonality.getTriad();

            int[] permutatedTriad = Note.getClosestPermutation(oldTriad, newTriad);

            //Si una nota pertenecía a la tonalidad (por lo tanto estará en su escala oldScale[i]), la nota será reemplazada por targetScale[i]
            int[] targetScale = new int[newScale.Count()];

            if (permutatedTriad[0] == newTriad[1])
            {
                targetScale[0] = permutatedTriad[0];
                targetScale[1] = newScale[3];
                targetScale[2] = permutatedTriad[1];
                targetScale[3] = newScale[5];
                targetScale[4] = permutatedTriad[2];
                targetScale[5] = newScale[1];
                targetScale[6] = newScale[1];
                if (Note.getNoteDistance(oldScale[3], newScale[6]) < Note.getNoteDistance(oldScale[3], newScale[5]))
                {
                    targetScale[3] = newScale[6];
                }
            }
            else if (permutatedTriad[0] == newTriad[2])
            {
                targetScale[0] = permutatedTriad[0];
                targetScale[1] = newScale[5];
                targetScale[2] = permutatedTriad[1];
                targetScale[3] = newScale[1];
                targetScale[4] = permutatedTriad[2];
                targetScale[5] = newScale[3];
                targetScale[6] = newScale[3];
                if (Note.getNoteDistance(oldScale[1], newScale[6]) < Note.getNoteDistance(oldScale[1], newScale[5]))
                {
                    targetScale[1] = newScale[6];
                }
            }
            else //Si la triada está sin permutar (permutatedTriad[0] == newTriad[0])
            {
                targetScale = newScale;
            }

            //Aplicamos el transporte voz a voz
            foreach (Voice v in this.voiceList)
            {
                v.modulate(oldTonality, targetScale);
            }
        }
コード例 #10
0
        public override void invert(int p, Tonality tonality)
        {
            if (this.isSilence())
            {
                return;
            }

            int      distance   = this.pitch - p;
            bool     inTonality = tonality.hasNote(p);
            Interval interval   = new Interval(distance, inTonality);

            interval.invert(false, true, true);
            this.pitch = p + interval.toPitch();
        }
コード例 #11
0
        internal void RachmaninoffInvert(Tonality tonality)
        {
            int mean = this.pitchMean();

            int thirdPitch = tonality.getScale()[2];

            thirdPitch = Note.convertToClosestPitch(mean, thirdPitch);

            //Aplicar inversion
            foreach (MusicItem mi in this.musicItemList)
            {
                mi.RachmaninoffInvert(thirdPitch, tonality);
            }
        }
コード例 #12
0
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }

            Tonality t = obj as Tonality;

            if ((Tonality)t == null)
            {
                return(false);
            }

            return(this.accidentals == t.accidentals && this.mode == t.mode);
        }
コード例 #13
0
        public void invert(Tonality tonality)
        {
            int mean = this.pitchMean();

            int tonicPitch = tonality.getTonicPitch();

            if (tonality.getMode() == Tonality.MINOR)
            {
                tonicPitch += 3;
            }

            tonicPitch = Note.convertToClosestPitch(mean, tonicPitch);

            //Apply inversion
            foreach (MusicItem mi in this.musicItemList)
            {
                mi.invert(tonicPitch, tonality);
            }
        }
コード例 #14
0
        public override void modulate(Tonality oldTonality, int[] targetScale)
        {
            if (this.isSilence())
            {
                return;
            }

            int[] oldScale = oldTonality.getScale();

            //Modificamos la altura de la nota solo si pertenecía a la tonalidad.
            for (int i = 0; i < oldScale.Length; i++)
            {
                if (Note.isSameNote(this.pitch, oldScale[i]))
                {
                    this.pitch = convertToClosestPitch(pitch, targetScale[i]);
                    return;
                }
            }
        }
コード例 #15
0
        public override void RachmaninoffInvert(int p, Tonality tonality)
        {
            if (this.isSilence())
            {
                return;
            }

            int doubleDistance = 0;

            if (tonality.getMode() == Tonality.MAJOR)
            {
                doubleDistance = this.pitch * 2 - (p * 2 - 1);
            }
            else
            {
                doubleDistance = this.pitch * 2 - (p * 2 + 1);
            }

            this.pitch -= doubleDistance;
        }
コード例 #16
0
        internal void interpolate(Tonality tonality)
        {
            int percentage = RNG.generate(10, 50);

            List <int> nonSilentNotes = getNonSilentNotes();

            int number = Math.Max(percentage * nonSilentNotes.Count / 100, 1);

            for (int i = 0; i < number; i++)
            {
                int       element = RNG.generate(0, nonSilentNotes.Count - 1);
                MusicItem mi      = musicItemList[nonSilentNotes[element]];

                int newNotePitch = Note.convertToClosestPitch(mi.pitchMean(), tonality.getRandomPitchFromScale(70));

                /*
                 * SplitNote = true: Divide note length by half and add a random note after it
                 * SplitNote = false: Substitute a silence with a random note.
                 */
                bool splitNote = true;
                if (element != musicItemList.Count - 1 && musicItemList[nonSilentNotes[element] + 1].isSilence() && RNG.generateBool())
                {
                    splitNote = false;
                }

                if (splitNote)
                {
                    mi.changeDuration(new Duration(1, 2));
                    musicItemList.Insert(nonSilentNotes[element] + 1, new Note(newNotePitch, mi.getDuration()));
                }
                else
                {
                    musicItemList[nonSilentNotes[element] + 1] = new Note(newNotePitch, musicItemList[nonSilentNotes[element] + 1].getDuration());
                }

                nonSilentNotes = getNonSilentNotes();
            }
        }
コード例 #17
0
 public abstract void invert(int pitch, Tonality tonality);
コード例 #18
0
 public void setTonality(Tonality t)
 {
     this.tonality = t;
 }
コード例 #19
0
 public abstract void modulate(Tonality oldTonality, int[] targetScale);
コード例 #20
0
 public abstract void RachmaninoffInvert(int pitch, Tonality tonality);