Esempio n. 1
0
        internal static ParsingResult TryParse(string input, out MidiTimeSpan timeSpan)
        {
            timeSpan = null;

            if (string.IsNullOrWhiteSpace(input))
            {
                return(ParsingResult.EmptyInputString);
            }

            var match = ParsingUtilities.Match(input, Patterns);

            if (match == null)
            {
                return(ParsingResult.NotMatched);
            }

            long midiTimeSpan;

            if (!ParsingUtilities.ParseLong(match, TimeSpanGroupName, 0, out midiTimeSpan))
            {
                return(new ParsingResult(OutOfRange));
            }

            timeSpan = new MidiTimeSpan(midiTimeSpan);
            return(ParsingResult.Parsed);
        }
Esempio n. 2
0
        internal static ParsingResult TryParse(string input, out BarBeatTimeSpan timeSpan)
        {
            timeSpan = null;

            if (string.IsNullOrWhiteSpace(input))
            {
                return(ParsingResult.EmptyInputString);
            }

            var match = ParsingUtilities.Match(input, Patterns);

            if (match == null)
            {
                return(ParsingResult.NotMatched);
            }

            long bars;

            if (!ParsingUtilities.ParseLong(match, BarsGroupName, 0, out bars))
            {
                return(new ParsingResult(BarsIsOutOfRange));
            }

            long beats;

            if (!ParsingUtilities.ParseLong(match, BeatsGroupName, 0, out beats))
            {
                return(new ParsingResult(BeatsIsOutOfRange));
            }

            long ticks;

            if (!ParsingUtilities.ParseLong(match, TicksGroupName, 0, out ticks))
            {
                return(new ParsingResult(BeatsIsOutOfRange));
            }

            timeSpan = new BarBeatTimeSpan(bars, beats, ticks);
            return(ParsingResult.Parsed);
        }
Esempio n. 3
0
        internal static ParsingResult TryParse(string input, out MusicalTimeSpan timeSpan)
        {
            timeSpan = null;

            if (string.IsNullOrWhiteSpace(input))
            {
                return(ParsingResult.EmptyInputString);
            }

            var match = ParsingUtilities.Match(input, Patterns);

            if (match == null)
            {
                return(ParsingResult.NotMatched);
            }

            // Fraction

            long numerator;

            if (!ParsingUtilities.ParseLong(match, NumeratorGroupName, 1, out numerator))
            {
                return(new ParsingResult(NumeratorIsOutOfRange));
            }

            long denominator;

            if (!ParsingUtilities.ParseLong(match, DenominatorGroupName, 1, out denominator))
            {
                return(new ParsingResult(DenominatorIsOutOfRange));
            }

            var fractionMnemonicGroup = match.Groups[FractionMnemonicGroupName];

            if (fractionMnemonicGroup.Success)
            {
                var fractionDefinition = Fractions[fractionMnemonicGroup.Value];
                numerator   = fractionDefinition.Item1;
                denominator = fractionDefinition.Item2;
            }

            // Tuplet

            int tupletNotesCount;

            if (!ParsingUtilities.ParseInt(match, TupletNotesCountGroupName, 1, out tupletNotesCount))
            {
                return(new ParsingResult(TupletNotesCountIsOutOfRange));
            }

            int tupletSpaceSize;

            if (!ParsingUtilities.ParseInt(match, TupletSpaceSizeGroupName, 1, out tupletSpaceSize))
            {
                return(new ParsingResult(TupletSpaceSizeIsOutOfRange));
            }

            var tupletMnemonicGroup = match.Groups[TupletMnemonicGroupName];

            if (tupletMnemonicGroup.Success)
            {
                var tupletDefinition = Tuplets[tupletMnemonicGroup.Value];
                tupletNotesCount = tupletDefinition.Item1;
                tupletSpaceSize  = tupletDefinition.Item2;
            }

            // Dots

            var dotsGroup = match.Groups[DotsGroupName];
            var dots      = dotsGroup.Success
                ? dotsGroup.Value.Length
                : 0;

            //

            timeSpan = new MusicalTimeSpan(numerator, denominator).Dotted(dots).Tuplet(tupletNotesCount, tupletSpaceSize);
            return(ParsingResult.Parsed);
        }