private static Record ReadRecord(CsvReader csvReader, int lineNumber, MidiFileCsvConversionSettings settings) { var record = csvReader.ReadRecord(); if (record == null) { return(null); } var values = record.Values; if (values.Length < 3) { CsvError.ThrowBadFormat(record.LineNumber, "Missing required parameters."); } int parsedTrackNumber; var trackNumber = int.TryParse(values[0], out parsedTrackNumber) ? (int?)parsedTrackNumber : null; ITimeSpan time = null; TimeSpanUtilities.TryParse(values[1], settings.TimeType, out time); var recordType = values[2]; if (string.IsNullOrEmpty(recordType)) { CsvError.ThrowBadFormat(record.LineNumber, "Record type isn't specified."); } var parameters = values.Skip(3).ToArray(); return(new Record(record.LineNumber, trackNumber, time, recordType, parameters)); }
/// <inheritdoc /> public async Task <bool?> TryEvaluateModuleAsync([NotNull] IEvaluationScheduler scheduler, [NotNull] ModuleDefinition module, QualifierId qualifierId) { // Abstraction between SDK/Workspace/Core/Resolvers is broken here... var moduleDefinition = (ModuleDefinition)module; if (!string.Equals(moduleDefinition.Descriptor.ResolverName, Name, StringComparison.Ordinal)) { return(null); } var downloadData = m_workspaceResolver.Downloads[module.Descriptor.Name]; // Make sure evaluating is guarded by the semaphore, so it only happens one at a time // There is no need to make sure we don't evaluate duplicate work here since module evaluation // happens once per qualifier. await m_evaluationSemaphore.WaitAsync(); try { // Modules of the download resolver are always instantiated with the empty qualifier var moduleRegistry = (ModuleRegistry)m_frontEndHost.ModuleRegistry; var moduleLiteral = moduleRegistry .GetUninstantiatedModuleInfoByPath(downloadData.ModuleSpecFile) .FileModuleLiteral .InstantiateFileModuleLiteral(moduleRegistry, QualifierValue.CreateEmpty(m_context.QualifierTable)); // Evaluate all values of the module using (var contextTree = new ContextTree( m_frontEndHost, m_context, m_logger, m_evaluationStatistics, new QualifierValueCache(), isBeingDebugged: false, decorator: null, moduleLiteral, new EvaluatorConfiguration(trackMethodInvocations: false, cycleDetectorStartupDelay: TimeSpanUtilities.MillisecondsToTimeSpan(10)), scheduler, FileType.Project)) { var moduleTracker = VisitedModuleTracker.Create(isDebug: false); var success = await moduleLiteral.EvaluateAllAsync(contextTree.RootContext, moduleTracker, ModuleEvaluationMode.None); return(success); } } finally { m_evaluationSemaphore.Release(); } }
public static IEnumerable <Note> ConvertToNotes(Stream stream, TempoMap tempoMap, NoteCsvConversionSettings settings) { using (var csvReader = new CsvReader(stream, settings.CsvDelimiter)) { CsvRecord record = null; while ((record = csvReader.ReadRecord()) != null) { var values = record.Values; if (values.Length < 6) { CsvError.ThrowBadFormat(record.LineNumber, "Missing required parameters."); } ITimeSpan time; if (!TimeSpanUtilities.TryParse(values[0], settings.TimeType, out time)) { CsvError.ThrowBadFormat(record.LineNumber, "Invalid time."); } FourBitNumber channel; if (!FourBitNumber.TryParse(values[1], out channel)) { CsvError.ThrowBadFormat(record.LineNumber, "Invalid channel."); } SevenBitNumber noteNumber; if (!TryParseNoteNumber(values[2], settings.NoteNumberFormat, out noteNumber)) { CsvError.ThrowBadFormat(record.LineNumber, "Invalid note number or letter."); } ITimeSpan length; if (!TimeSpanUtilities.TryParse(values[3], settings.NoteLengthType, out length)) { CsvError.ThrowBadFormat(record.LineNumber, "Invalid length."); } SevenBitNumber velocity; if (!SevenBitNumber.TryParse(values[4], out velocity)) { CsvError.ThrowBadFormat(record.LineNumber, "Invalid velocity."); } SevenBitNumber offVelocity; if (!SevenBitNumber.TryParse(values[5], out offVelocity)) { CsvError.ThrowBadFormat(record.LineNumber, "Invalid off velocity."); } var convertedTime = TimeConverter.ConvertFrom(time, tempoMap); var convertedLength = LengthConverter.ConvertFrom(length, convertedTime, tempoMap); yield return(new Note(noteNumber, convertedLength, convertedTime) { Channel = channel, Velocity = velocity, OffVelocity = offVelocity }); } } }
public static void ParseInvalidInput(string input) { Assert.Throws <FormatException>(() => TimeSpanUtilities.Parse(input)); }