public override Score Render() { var guitarLc = new InstrumentTrack(Instrument.ElectricGuitarJazz, Pan.Left, new List <List <Note> >()); var guitarL = new InstrumentTrack(Instrument.DistortionGuitar, Pan.Left, new List <List <Note> >()); var guitarRc = new InstrumentTrack(Instrument.ElectricGuitarClean, Pan.Right, new List <List <Note> >()); var guitarR = new InstrumentTrack(Instrument.OverdrivenGuitar, Pan.Right, new List <List <Note> >()); var guitarC = new InstrumentTrack(Instrument.OverdrivenGuitar, Pan.Center, new List <List <Note> >()); var bass = new InstrumentTrack(Instrument.ElectricBassPick, Pan.Center, new List <List <Note> >()); var drums = new PercussionTrack(new List <List <PercussionNote> >()); var renderedSections = Sections.Select(s => s.Render(guitarR, guitarL, guitarC, guitarLc, guitarRc, bass, drums)); return(new Score(renderedSections.Sum(s => s), new Dictionary <int, TimeSignature> { { 0, _songInfo.TimeSignature } }, new Dictionary <int, int> { { 0, _songInfo.Tempo } }, new List <InstrumentTrack> { guitarL, guitarR, guitarC, guitarLc, guitarRc, bass }, drums)); }
private void RenderMeasure(InstrumentTrack guitarR, InstrumentTrack guitarL, InstrumentTrack guitarC, InstrumentTrack guitarLc, InstrumentTrack guitarRc, InstrumentTrack bass, PercussionTrack drums, int repeat, int measure) { var grooveNotes = _drumstyle.Notes; var kicks = grooveNotes.Where(n => n.Percussion == Percussion.BassDrum1).ToList(); var gNotes = kicks.Select((k, i) => new Tuple <double, double>(k.Start, i < kicks.Count - 1 ? kicks[i + 1].Start - k.Start : _songInfo.TimeSignature.BeatCount - k.Start)).ToList(); if (!gNotes.Any()) { gNotes.Add(new Tuple <double, double>(0, _songInfo.TimeSignature.BeatCount)); } if (Type == SectionType.Intro || Type == SectionType.Outro || Type == SectionType.Bridge) { _strummer.AddGuitarNotes(new[] { guitarLc, guitarRc }, Chords, measure, _songInfo); guitarL.Notes.Add(new List <Note>()); guitarR.Notes.Add(new List <Note>()); } else { _strummer.AddGuitarNotes(new[] { guitarL, guitarR }, Chords, measure, _songInfo); guitarLc.Notes.Add(new List <Note>()); guitarRc.Notes.Add(new List <Note>()); } _strummer.AddBassNotes(bass, Chords, measure, _songInfo); drums.Notes.Add(AddFill(repeat, measure, grooveNotes)); if (measure != 0) { // All the solo lead notes are actually in the first measure, so add empty ones after it guitarC.Notes.Add(new List <Note>()); } }
private void RenderRepeat(InstrumentTrack guitarR, InstrumentTrack guitarL, InstrumentTrack guitarC, InstrumentTrack guitarLc, InstrumentTrack guitarRc, InstrumentTrack bass, PercussionTrack drums, int repeat) { if (Type == SectionType.Verse || Type == SectionType.Chorus) { guitarC.Notes.Add(Lead.ToList()); } else { guitarC.Notes.Add(new List <Note>()); } for (var measure = 0; measure < _measures; measure++) { RenderMeasure(guitarR, guitarL, guitarC, guitarLc, guitarRc, bass, drums, repeat, measure); } }
internal int Render(InstrumentTrack guitarR, InstrumentTrack guitarL, InstrumentTrack guitarC, InstrumentTrack guitarLc, InstrumentTrack guitarRc, InstrumentTrack bass, PercussionTrack drums) { for (var repeat = 0; repeat < _repeats; repeat++) { RenderRepeat(guitarR, guitarL, guitarC, guitarLc, guitarRc, bass, drums, repeat); } return(Measures); }