Inheritance: INoteGenerator, IPlaybackGenerator
        public Composition Generate()
        {
            int trackNo = composition.Tracks.Count;
            Composition newComp = new Composition();

            Parallel.For(0, trackNo, i =>
                {
                    PatchNames instrument = composition.Tracks[i].Instrument;
                    Console.WriteLine("Generating track {0} with instrument {1}", i, instrument.ToString());
                    var melodySeq = composition.Tracks[i].GetMainSequence() as MelodySequence;

                    MarkovChainGenerator chain = new MarkovChainGenerator(instrument,2, melodySeq.Length);
                    chain.AddMelody(melodySeq);
                    var notes = chain.Generate();

                    Track track = new Track(instrument, (byte)(i + 1));
                    track.AddSequence(notes);
                    newComp.Add(track);
                    //var notes = trackGenerator.Generate();
                    Console.WriteLine("Done Generating track {0}", i);

                });

            return newComp;
        }
示例#2
0
        public GeneticGenerator(IFitnessFunction fitnessFunction, MelodySequence base_seq = null)
        {
            this.fitnessFunction = fitnessFunction;
            this.base_seq = base_seq;
            this.MaxGenerations = 2000;

            if (base_seq != null)
                CreateUniques();

            if (base_seq != null)
            {
                var mark = new MarkovChainGenerator(2);
                mark.AddMelody(base_seq);
                GPCustomTree.generator = mark;
            }
        }
示例#3
0
        public GeneticGenerator(IFitnessFunction fitnessFunction, PatchNames instrument = PatchNames.Acoustic_Grand, CompositionCategory cat=null)
        {
            this.fitnessFunction = fitnessFunction;
            this.cat = cat;
            this.MaxGenerations = 1000;
            this.PrintProgress = true;
            this.instrument = instrument;

            if (cat != null)
            {
                // Markov generator
                var mark = new MarkovChainGenerator(instrument, 2);

                // Allowed notes
                HashSet<Durations> durs = new HashSet<Durations>();
                HashSet<int> fullPitches = new HashSet<int>();

                foreach(var c in cat.Compositions)
                {
                    if (c.Tracks.Count < 1)
                        continue;
                    var cloneMel = (c.Tracks[0].GetMainSequence() as MelodySequence).Clone() as MelodySequence;

                    cloneMel.StandardizeDuration();
                    mark.AddMelody(cloneMel);

                    foreach (var n in cloneMel.Notes)
                    {
                        durs.Add(NoteGene.GetClosestDuration(n.Duration));
                        fullPitches.Add(n.Pitch);
                    }

                    avgLength += cloneMel.Length;
                }
                avgLength /= cat.Compositions.Length;
                GPCustomTree.generator = mark;

                NoteGene.AllowedDurations = durs.ToArray();
                NoteGene.AllowedFullPitches = fullPitches.ToArray();

            }
        }