示例#1
0
        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));
        }
示例#2
0
        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>());
            }
        }
示例#3
0
        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);
            }
        }
示例#4
0
        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);
        }