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 } }
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>()); } }
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); }
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); } }
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)); }
public void AddBassNotes(InstrumentTrack track, List <Tuple <int, Chord> > chords, int measure, SongInfo songInfo) { AddNotes(new[] { track }, chords, measure, songInfo, true); }