Exemple #1
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;
     }
 }
Exemple #2
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);
            }
        }
Exemple #3
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);
            }
        }
        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;
                }
            }
        }