private void InsertRest(int deltaTicks)
        {
            SymbolBuilder symbolBuilder = new SymbolBuilder();

            symbolBuilder = AddLengthToSymbol(deltaTicks, symbolBuilder);
            Symbol rest = symbolBuilder.Build();

            composition.Tokens.Add(rest);
        }
        private void EndCurrentNote(MidiEvent evt)
        {
            if (currentSymbolBuilder == null)
            {
                return;
            }

            AddLengthToSymbol(evt.DeltaTicks, currentSymbolBuilder);
            Symbol note = currentSymbolBuilder.Build();

            composition.Tokens.Add(note);
            currentSymbolBuilder = null;
        }
示例#3
0
        public Token Convert(LilypondTokenEnumerator enumerator)
        {
            var input = enumerator.Current;
            var match = regex.Match(input.TokenText);

            if (match.Success)
            {
                SymbolBuilder builder = new SymbolBuilder();
                if (int.TryParse(match.Groups[1].Value, out int denominator))
                {
                    int dots = match.Groups[2].Length;
                    builder.WithLength(denominator, dots);
                    return(builder.Build());
                }
                else
                {
                    throw new InvalidOperationException("Not a rest that can be converted");
                }
            }
            else
            {
                throw new InvalidOperationException("Not a rest that can be converted");
            }
        }
示例#4
0
        public Token Convert(LilypondTokenEnumerator enumerator)
        {
            var input = enumerator.Current;
            var match = noteRegex.Match(input.TokenText);

            if (match.Success)
            {
                SymbolBuilder builder    = new SymbolBuilder();
                var           tone       = GetToneFromLetter(match.Groups[1].Value);
                Accidental    accidental = Accidental.None;
                if (match.Groups[2].Success)
                {
                    accidental = match.Groups[2].Value == "is" ? Accidental.Sharp : Accidental.Flat;
                }
                // determine octave
                MoveToClosestOctaveOffset(tone);
                previousNoteTone = tone;
                if (match.Groups[3].Success)
                {
                    UpdateOctaveOffset(match.Groups[3].Value);
                }
                // set pitch
                builder.WithPitch(tone, accidental, octaveOffset);
                // determine length
                if (int.TryParse(match.Groups[4].Value, out int denominator))
                {
                    int dots = match.Groups[5].Length;
                    builder.WithLength(denominator, dots);
                }
                return(builder.Build());
            }
            else
            {
                throw new InvalidOperationException("Not a note that can be read");
            }
        }