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);
        }
Example #2
0
 /// <summary>
 /// FuxExMachinaFactory constructor.
 /// </summary>
 /// <param name="compositionContexts">The composition contexts to use</param>
 /// <param name="noteChoices">The note choices to use</param>
 /// <param name="noteChoiceWeightGenerator">The note choice weight generator to use</param>
 /// <param name="scaleDegreeEvaluator">The scale degree evaluator to use</param>
 /// <param name="compositionEvaluator">The composition evaluator to use</param>
 /// <param name="compositionDecorator">The composition decorator to use</param>
 /// <param name="random">The random number generator to use</param>
 /// <param name="logger">The logger to use</param>
 public FuxExMachinaFactory(
     CompositionContextCollection compositionContexts,
     NoteChoiceCollection noteChoices,
     NoteChoiceWeightGenerator noteChoiceWeightGenerator,
     ScaleDegreeEvaluator scaleDegreeEvaluator,
     CompositionEvaluator compositionEvaluator,
     CompositionDecorator compositionDecorator,
     CryptoRandom random,
     IFuxExMachinaLogger logger
     )
 {
     CompositionContexts       = compositionContexts;
     NoteChoices               = noteChoices;
     NoteChoiceWeightGenerator = noteChoiceWeightGenerator;
     ScaleDegreeEvaluator      = scaleDegreeEvaluator;
     CompositionEvaluator      = compositionEvaluator;
     CompositionDecorator      = compositionDecorator;
     Random = random;
     Logger = logger;
 }
Example #3
0
 public void Setup()
 {
     _factory             = FuxExMachinaTestFactoryProvider.GetTestFactory();
     _compositionContexts = _factory.CompositionContexts;
 }