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; }
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; } }
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(); } }