public void Visit(Note note)
        {
            if (note.tone != Tones.NO_TONE)
            {
                // Calculate duration
                double absoluteLength = 1.0 / (1.0 / (int)note.length);
                if (note.dot)
                {
                    absoluteLength += (absoluteLength / 2.0);
                }

                double relationToQuartNote  = (int)timeSignatureLengthNote / 4.0;
                double percentageOfBeatNote = 1.0 / (int)timeSignatureLengthNote / absoluteLength;
                double deltaTicks           = (Sequence.Division / relationToQuartNote) / percentageOfBeatNote;

                List <string> notesOrderWithCrosses = new List <string>()
                {
                    "c", "cis", "d", "dis", "e", "f", "fis", "g", "gis", "a", "ais", "b"
                };
                int noteHeight = notesOrderWithCrosses.IndexOf(note.tone.ToString().ToLower()) + ((note.pitch + 1) * 12);
                noteHeight += (int)note.intonation;
                InstrumentTrack.Insert(PreviousNoteAbsoluteTicks, new ChannelMessage(ChannelCommand.NoteOn, 1, noteHeight, 90)); // Data2 = volume

                PreviousNoteAbsoluteTicks += (int)deltaTicks;
                InstrumentTrack.Insert(PreviousNoteAbsoluteTicks, new ChannelMessage(ChannelCommand.NoteOn, 1, noteHeight, 0)); // Data2 = volume
            }
        }
Ejemplo n.º 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>());
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
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);
            }
        }
Ejemplo n.º 5
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));
        }
Ejemplo n.º 6
0
 public void AddBassNotes(InstrumentTrack track, List <Tuple <int, Chord> > chords, int measure, SongInfo songInfo)
 {
     AddNotes(new[] { track }, chords, measure, songInfo, true);
 }