private void AlterOctave(string value)
        {
            var name = Regex.Replace(value, @"[\d',.]", string.Empty)[0];

            switch (_previous.Name)
            {
            case Names.C when name == 'g' || name == 'a' || name == 'b':
            case Names.D when name == 'a' || name == 'b':
            case Names.E when name == 'b':
                _relativeOctave--;
                break;

            case Names.G when name == 'c':
            case Names.A when name == 'c' || name == 'd':
            case Names.B when name == 'c' || name == 'd' || name == 'e':
                _relativeOctave++;
                break;
            }

            var higher = value.ToCharArray().Count(a => a == '\'');

            if (higher > 0)
            {
                _relativeOctave += higher;
            }

            var lower = value.ToCharArray().Count(c => c == ',');

            if (lower > 0)
            {
                _relativeOctave -= lower;
            }
        }
        public TokenScoreBuilder()
        {
            _lastTimeSignature = new TimeSignature {
                Beat = Durations.Quarter, Ticks = 4
            };

            _currentGroup       = new SymbolGroup();
            _currentGroup.Meter = _lastTimeSignature;

            _score = new Score {
                SymbolGroups = { _currentGroup }
            };
            _relativeOctave = Octaves.Three;
            _previous       = new Common.Models.Note(Names.C, _relativeOctave);
        }