/* * 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; /** * Harmonic consistency rule * * gives a bonus to correclty constructed chords * * @author davide nunes */ public class HCValidChords extends AbstractCompositionRule{ private int[] scale; private int tonic; public HCValidChords(double weight, int[] scale, Note tonic){ super(weight); this.scale = scale; this.tonic = ConverterUtil.getPitch(tonic); } @Override protected double evaluation(IChromosome ic) { double result = 0.0; Gene[] genes = ic.getGenes(); for(int i = 0; i < genes.length; i++){ Note[] currentChord = (Note[]) genes[i].getAllele(); if(HarmonicUtils.isValidChord(currentChord, scale, tonic)) result+= 1/(genes.length*1.0); } return result; } @Override public String getName() { return "Valid chords rule"; } }