private static void AddBeatWithChordToVoice(Voice voice, SongChord2014 sourceChord, Duration duration, Single durationTime) { var beat = new Beat(); beat.Duration = duration; voice.AddBeat(beat); beat.ChordId = sourceChord.ChordId.ToString(); AlphaTab.Model.Chord chord = null; try { chord = beat.Chord; } catch (KeyNotFoundException) { } //Will be non-null if predefined chord exist (and predefined chord should exist if ChordId is present in ChordTemplates) if (chord == null) { beat.ChordId = null; //chord = new global::alphatab.model.Chord(); //voice.bar.track.chords.set(beat.chordId, chord); //Set notes in beat from this chord if (sourceChord.ChordNotes != null) { foreach (var sourceNote in sourceChord.ChordNotes) { var note1 = NoteFromNote(sourceNote, durationTime); beat.AddNote(note1); } } } else { //Set notes in beat from predefined chord for (int i = 0; i < chord.Strings.Count; i++) { var tmpstrFret = chord.Strings[i]; if (tmpstrFret > -1) { var note1 = new Note(); note1.Fret = tmpstrFret; note1.String = i + 1; beat.AddNote(note1); } } } }
private void Note(Beat beat) { // fret.string if (_sy != AlphaTexSymbols.Number && !(_sy == AlphaTexSymbols.String && (_syData.ToString().ToLower() == "x" || _syData.ToString().ToLower() == "-"))) { Error("note-fret", AlphaTexSymbols.Number); } var isDead = _syData.ToString().ToLower() == "x"; var isTie = _syData.ToString().ToLower() == "-"; int fret = (int)(isDead || isTie ? 0 : _syData); NewSy(); // Fret done if (_sy != AlphaTexSymbols.Dot) { Error("note", AlphaTexSymbols.Dot); } NewSy(); // dot done if (_sy != AlphaTexSymbols.Number) { Error("note-string", AlphaTexSymbols.Number); } int @string = (int)_syData; if (@string < 1 || @string > _track.Tuning.Length) { Error("note-string", AlphaTexSymbols.Number, false); } NewSy(); // string done // read effects var note = new Note(); NoteEffects(note); // create note note.String = _track.Tuning.Length - (@string - 1); note.IsDead = isDead; note.IsTieDestination = isTie; if (!isTie) { note.Fret = fret; } beat.AddNote(note); }
public void ReadGrace(Voice voice, Note note) { var graceBeat = new Beat(); var graceNote = new Note(); graceNote.String = note.String; graceNote.Fret = _data.ReadSignedByte(); graceBeat.Duration = Duration.ThirtySecond; graceBeat.Dynamic = ToDynamicValue(_data.ReadSignedByte()); var transition = _data.ReadSignedByte(); switch (transition) { case 0: // none break; case 1: graceNote.SlideType = SlideType.Legato; graceNote.SlideTarget = note; break; case 2: // bend break; case 3: // hammer graceNote.IsHammerPullOrigin = true; break; } graceNote.Dynamic = graceBeat.Dynamic; _data.Skip(1); // duration if (_versionNumber < 500) { graceBeat.GraceType = GraceType.BeforeBeat; } else { var flags = _data.ReadByte(); graceNote.IsDead = (flags & 0x01) != 0; graceBeat.GraceType = (flags & 0x02) != 0 ? GraceType.OnBeat : GraceType.BeforeBeat; } graceBeat.AddNote(graceNote); voice.AddGraceBeat(graceBeat); }
private static void AddBeatAndNoteToVoice(Voice voice, SongNote2014 note, Duration duration, Single durationTime) { var beat = new Beat(); beat.Duration = duration; voice.AddBeat(beat); if (note != null) { var destNote = NoteFromNote(note, durationTime); beat.AddNote(destNote); if (note.HammerOn == 1 && _prevConvertedNote != null) { _prevConvertedNote.IsHammerPullOrigin = true; //_prevConvertedNote.slideTarget = destNote; //_prevConvertedNote.slideType = SlideType.Shift; destNote.IsHammerPullOrigin = false; destNote.IsGhost = true; //_prevConvertedNote.hammerPullOrigin = destNote;// _prevConvertedNote; destNote.HammerPullOrigin = _prevConvertedNote; } _prevConvertedNote = destNote; } }
public void ReadNote(Track track, Bar bar, Voice voice, Beat beat, int stringIndex) { var newNote = new Note(); newNote.String = track.Tuning.Length - stringIndex; var flags = _data.ReadByte(); if ((flags & 0x02) != 0) { newNote.Accentuated = AccentuationType.Heavy; } else if ((flags & 0x40) != 0) { newNote.Accentuated = AccentuationType.Normal; } newNote.IsGhost = ((flags & 0x04) != 0); if ((flags & 0x20) != 0) { var noteType = _data.ReadByte(); if (noteType == 3) { newNote.IsDead = true; } else if (noteType == 2) { newNote.IsTieDestination = true; } } if ((flags & 0x10) != 0) { var dynamicNumber = _data.ReadSignedByte(); newNote.Dynamic = ToDynamicValue(dynamicNumber); beat.Dynamic = newNote.Dynamic; } if ((flags & 0x20) != 0) { newNote.Fret = _data.ReadSignedByte(); } if ((flags & 0x80) != 0) { newNote.LeftHandFinger = (Fingers)_data.ReadSignedByte(); newNote.RightHandFinger = (Fingers)_data.ReadSignedByte(); newNote.IsFingering = true; } if (_versionNumber >= 500) { if ((flags & 0x01) != 0) { newNote.DurationPercent = ReadDouble(); } var flags2 = _data.ReadByte(); newNote.SwapAccidentals = (flags2 & 0x02) != 0; } beat.AddNote(newNote); if ((flags & 0x08) != 0) { ReadNoteEffects(track, voice, beat, newNote); } }
private void Note(Beat beat) { // fret.string var isDead = _syData == "x"; var isTie = _syData == "-"; var fret = -1; var octave = -1; var tone = -1; switch (_sy) { case AlphaTexSymbols.Number: fret = (int)_syData; break; case AlphaTexSymbols.String: if (isTie || isDead) { fret = 0; } else { Error("note-fret", AlphaTexSymbols.Number); } break; case AlphaTexSymbols.Tuning: var tuning = (TuningParseResult)_syData; octave = tuning.Octave; tone = tuning.NoteValue; break; default: Error("note-fret", AlphaTexSymbols.Number); break; } NewSy(); // Fret done var isFretted = octave == -1 && _track.Tuning.Length > 0; int @string = -1; if (isFretted) { // Fret [Dot] String if (_sy != AlphaTexSymbols.Dot) { Error("note", AlphaTexSymbols.Dot); } NewSy(); // dot done if (_sy != AlphaTexSymbols.Number) { Error("note-string", AlphaTexSymbols.Number); } @string = (int)_syData; if (@string < 1 || @string > _track.Tuning.Length) { Error("note-string", AlphaTexSymbols.Number, false); } NewSy(); // string done } // read effects var note = new Note(); beat.AddNote(note); if (isFretted) { note.String = _track.Tuning.Length - (@string - 1); note.IsDead = isDead; note.IsTieDestination = isTie; if (!isTie) { note.Fret = fret; } } else { note.Octave = octave; note.Tone = tone; note.IsTieDestination = isTie; } NoteEffects(note); }