/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package geneticmusic.rulesInConstruction;
import geneticmusic.fitness.CompositionRule;
import geneticmusic.jmusic.bridge.ConverterUtil;
import jm.music.data.Phrase;
import jm.music.tools.PhraseAnalysis;
import org.jgap.IChromosome;
/**
*
* @author davide
*/
public class NoteDensityRule implements CompositionRule{
double density;
double referenceDuration;
/**
*
* @param density double value
* @param referenceDuration Reference duration from JMUSIC Duration constants
*/
public NoteDensityRule(double density, double referenceDuration){
this.density = density;
this.referenceDuration = referenceDuration;
}
@Override
public double evaluate(IChromosome ic) {
double result = 0.0;
Phrase chromosome = ConverterUtil.convert(ic);
try {
double currentDensity = PhraseAnalysis.noteDensity(chromosome, referenceDuration);
if(currentDensity > density)
result += currentDensity;
} catch(Exception e){}
return result;
}
}