public static FuxExMachinaFactory GetTestFactory() { if (_instance != null) { return(_instance); } var random = new CryptoRandom(); var scaleDegreeEvaluator = new ScaleDegreeEvaluator(); var compositionContext = new CompositionContext(); var compositionContexts = new CompositionContextCollection(); var noteChoices = new NoteChoiceCollection(); var noteChoiceWeightGenerator = new NoteChoiceWeightGenerator(random); var ruleEvaluatorFactory = new RuleEvaluatorFactory( new AscendingSeventhRuleEvaluator(scaleDegreeEvaluator), new DissonanceRuleEvaluator(), new DissonantLeapRuleEvaluator(scaleDegreeEvaluator, compositionContext), new DoubledLeapRuleEvaluator(), new DoubledNoteRuleEvaluator(scaleDegreeEvaluator), new LeapReturnRuleEvaluator(), new MultipleLeapRuleEvaluator(), new ParallelPerfectsRuleEvaluator(scaleDegreeEvaluator) ); var aggregateEvaluator = new AggregateRuleEvaluator(ruleEvaluatorFactory); var mordentDecorator = new MordentDecorator(scaleDegreeEvaluator, random); var passingToneDecorator = new PassingToneDecorator(scaleDegreeEvaluator, random); var appogiaturaDecorator = new AppogiaturaDecorator(scaleDegreeEvaluator, random); _instance = new FuxExMachinaFactory( compositionContexts, noteChoices, noteChoiceWeightGenerator, scaleDegreeEvaluator, new CompositionEvaluator(aggregateEvaluator), new CompositionDecorator(passingToneDecorator, mordentDecorator, appogiaturaDecorator), new CryptoRandom(), new FuxExMachinaNullLogger() ); return(_instance); }
/// <summary> /// CompositionEvaluator constructor. /// </summary> /// <param name="aggregateRuleEvaluator">The AggregateRuleEvaluator to use</param> public CompositionEvaluator(AggregateRuleEvaluator aggregateRuleEvaluator) { _aggregateRuleEvaluator = aggregateRuleEvaluator; }