コード例 #1
0
        public static Score Interpret(List <Token> tokens)
        {
            var builder = new TokenScoreBuilder();

            var visitor = new TokenVisitor(builder);

            foreach (var token in tokens)
            {
                token.Accept(visitor);
            }

            return(builder.Build());
        }
コード例 #2
0
        public void AddRepeat(Repeat repeat)
        {
            _currentGroup = new SymbolGroup
            {
                Meter  = _score.SymbolGroups.Last().Meter,
                Tempo  = _score.SymbolGroups.Last().Tempo,
                Repeat = new Common.Models.Repeat
                {
                    Times = repeat.Times
                }
            };

            var visitor = new TokenVisitor(this);

            foreach (var token in repeat.Inner)
            {
                token.Accept(visitor);
            }

            foreach (var alt in repeat.Alternatives)
            {
                _currentGroup.Repeat.Alternatives.Add(new SymbolGroup
                {
                    Meter = _score.SymbolGroups.Last().Meter,
                    Tempo = _score.SymbolGroups.Last().Tempo,
                });

                foreach (var token in alt)
                {
                    if (token is Note note)
                    {
                        _currentGroup.Repeat.Alternatives.Last().Symbols.Add(GetNote(note));
                    }

                    if (token is Rest rest)
                    {
                        _currentGroup.Repeat.Alternatives.Last().Symbols.Add(GetRest(rest));
                    }
                }
            }

            _score.SymbolGroups.Add(_currentGroup);
        }