/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package geneticmusic.choraleRules; import geneticmusic.domain.Note; import geneticmusic.fitness.AbstractCompositionRule; import geneticmusic.jmusic.bridge.ConverterUtil; import geneticmusic.jmusic.bridge.HarmonicUtils; import org.jgap.Gene; import org.jgap.IChromosome; /** * * @author davide */ public class HCDuplicateFundamental extends AbstractCompositionRule{ private int tonic; private int[] scale; public HCDuplicateFundamental(double weight, Note tonic, int[] scale){ super(weight); this.tonic = ConverterUtil.getPitch(tonic); this.scale = scale; } @Override protected double evaluation(IChromosome ic) { double result = 0.0; Gene[] genes = ic.getGenes(); for(Gene g : genes){ Note[] chord = (Note[]) g.getAllele(); int[] foundChord = HarmonicUtils.findChord(chord, tonic, scale); if(foundChord != null) if(HarmonicUtils.isFundamentalDuplicated(chord, foundChord)) result+= 1/(genes.length*1.0); } return result; } @Override public String getName() { return "Duplicate Fundamental Rule"; } }