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); }
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); }
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); }