Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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);
        }