static void Test8() { MusicPlayer player = new MusicPlayer(); Console.WriteLine("Hidden Markov Model"); var m1 = GetMelodySequence(@"test\other\frere.mid"); var m2 = GetMelodySequence(@"test\other\babaa.mid"); var m3 = GetMelodySequence(@"test\other\twinkle.mid"); var m4 = GetMelodySequence(@"test\hagrid.mid"); var m5 = GetMelodySequence(@"test\harry.mid"); var m6 = GetMelodySequence(@"test\harry2.mid"); MarkovGenerator markov = new MarkovGenerator(new MelodySequence[] { m6 }); while (true) { Composition comp = new Composition(); GeneticGenerator gen = new GeneticGenerator(new MetricSimilarity(m6, new IMetric[] { new Rhythm(), new RhythmicBigram(), new RhythmicInterval() })); var notes2 = gen.Generate(); Track t2 = new Track((PatchNames)0, 10); MelodySequence s = new MelodySequence(); s.AddPause((int)Durations.wn * 10); foreach (Note n in notes2.Notes) { if (n.Pitch <= 0) n.Pitch = 0; else if (n.Pitch > 48) n.Pitch = 40; else if (n.Pitch > 70) n.Pitch = 35; else { n.Pitch = 49; n.Duration *= 4; n.Velocity = 50; s.AddPause(n.Duration * 2); } s.AddNote(n); } t2.AddSequence(s); var notes3 = markov.Generate().Notes as Note[]; MelodySequence baseseq = new MelodySequence(); int max_dur = 0; int max_index = 0; for (int i = (int)(notes3.Length * 0.7f); i < notes3.Length; i++) { if (notes3[i].Duration > max_dur) { max_dur = notes3[i].Duration; max_index = i; } } Note last_note = null; for (int i = 0; i < max_index; i++) { last_note = notes3[i]; baseseq.AddNote(last_note); } baseseq.AddNote(new Note(last_note.Pitch - 12, last_note.Duration)); baseseq.AddNote(new Note(last_note.Pitch - 24, last_note.Duration * 2)); baseseq.AddPause(last_note.Duration * 32); Track t = new Track(PatchNames.Vibraphone, 1); var b1 = baseseq.Clone() as MelodySequence; var b2 = baseseq.Clone() as MelodySequence; var b3 = baseseq.Clone() as MelodySequence; b1.Transpose(12); b2.Transpose(6); b3.Transpose(-12); t.AddSequence(baseseq); t.AddSequence(b1); t.AddSequence(b2); t.AddSequence(b3); comp.Add(t); comp.Add(t2); Console.WriteLine("Press enter key to listen"); Console.ReadLine(); player.Play(comp); } }
/// <summary> /// Creates a new Melody Sequence for each n notes /// </summary> /// <param name="n">Period of notes</param> /// <returns></returns> public MelodySequence[] Split(int n) { List<MelodySequence> sequences = new List<MelodySequence>(); for(int i = 0; i < sequence.Count - n; i+=n) { MelodySequence seq = new MelodySequence(); for(int j = 0; j < n; j++) { seq.AddNote(this.sequence[i + j]); } sequences.Add(seq); } return sequences.ToArray(); }
MelodySequence NormalizeSequence(MelodySequence seq) { MelodySequence normalized = new MelodySequence(); foreach(var note in seq) { Note copy = note.Clone() as Note; copy.StandardizeDuration(); //copy.Octave = 6; normalized.AddNote(copy); } return normalized; }
public object Clone() { MelodySequence seq = new MelodySequence(); foreach (Note n in sequence) seq.AddNote(n.Clone() as Note); return seq; }