private static void ConvertMidiFileToCsv( MidiFile midiFile, MidiFileCsvLayout layout, TimeSpanType timeType, string[] expectedCsvLines, NoteFormat noteFormat = NoteFormat.Events, NoteNumberFormat noteNumberFormat = NoteNumberFormat.NoteNumber, TimeSpanType noteLengthType = TimeSpanType.Midi) { var filePath = Path.GetTempFileName(); var settings = new MidiFileCsvConversionSettings { CsvLayout = layout, TimeType = timeType, NoteFormat = noteFormat, NoteNumberFormat = noteNumberFormat, NoteLengthType = noteLengthType }; try { new CsvConverter().ConvertMidiFileToCsv(midiFile, filePath, true, settings); var actualCsvLines = File.ReadAllLines(filePath); CollectionAssert.AreEqual(expectedCsvLines, actualCsvLines, StringComparer.OrdinalIgnoreCase); } finally { File.Delete(filePath); } }
public void ConvertCsvToMidiFile_NoEvents(MidiFileCsvLayout layout, string[] csvLines) { var midiFile = ConvertCsvToMidiFile(layout, TimeSpanType.Midi, csvLines); Assert.AreEqual(MidiFileFormat.MultiTrack, midiFile.OriginalFormat, "File format is invalid."); Assert.AreEqual(new TicksPerQuarterNoteTimeDivision(1000), midiFile.TimeDivision, "Time division is invalid."); }
private static MidiFile ConvertCsvToMidiFile( MidiFileCsvLayout layout, TimeSpanType timeType, string[] csvLines, NoteFormat noteFormat = NoteFormat.Events, NoteNumberFormat noteNumberFormat = NoteNumberFormat.NoteNumber, TimeSpanType noteLengthType = TimeSpanType.Midi) { var filePath = Path.GetTempFileName(); File.WriteAllLines(filePath, csvLines); var settings = new MidiFileCsvConversionSettings { CsvLayout = layout, TimeType = timeType, NoteFormat = noteFormat, NoteNumberFormat = noteNumberFormat, NoteLengthType = noteLengthType }; try { var midiFile = new CsvConverter().ConvertCsvToMidiFile(filePath, settings); ConvertMidiFileToFromCsv(midiFile, filePath, settings); return(midiFile); } finally { File.Delete(filePath); } }
public void ConvertCsvToMidiFile_SingleTrackChunk(MidiFileCsvLayout layout, bool orderEvents, string[] csvLines) { if (!orderEvents) { var tmp = csvLines[2]; csvLines[2] = csvLines[4]; csvLines[4] = tmp; } var midiFile = ConvertCsvToMidiFile(layout, TimeSpanType.Midi, csvLines); var expectedEvents = new[] { new TimedEvent(new NoteOnEvent((SevenBitNumber)50, (SevenBitNumber)120) { Channel = (FourBitNumber)10 }, 0), new TimedEvent(new TextEvent("Test"), 0), new TimedEvent(new NoteOnEvent((SevenBitNumber)50, (SevenBitNumber)110) { Channel = (FourBitNumber)7 }, 100), new TimedEvent(new NoteOffEvent((SevenBitNumber)50, (SevenBitNumber)70) { Channel = (FourBitNumber)10 }, 250), new TimedEvent(new NoteOffEvent((SevenBitNumber)50, (SevenBitNumber)80) { Channel = (FourBitNumber)7 }, 1000) }; Assert.AreEqual(1, midiFile.GetTrackChunks().Count(), "Track chunks count is invalid."); MidiAsserts.AreEqual(expectedEvents, midiFile.GetTimedEvents(), false, 0, "Invalid events."); }
public void ConvertMidiFileToFromCsv([Values] MidiFileCsvLayout layout) { var settings = new MidiFileCsvConversionSettings { CsvLayout = layout }; ConvertMidiFileToFromCsv(settings); }
public void ConvertCsvToMidiFile_NoHeader(MidiFileCsvLayout layout, string[] csvLines) { var midiFile = ConvertCsvToMidiFile(layout, TimeSpanType.Midi, csvLines); Assert.AreEqual(new TicksPerQuarterNoteTimeDivision(TicksPerQuarterNoteTimeDivision.DefaultTicksPerQuarterNote), midiFile.TimeDivision, "Time division is invalid."); Assert.Throws <InvalidOperationException>(() => { var format = midiFile.OriginalFormat; }); }
public void ConvertCsvToMidiFile_SingleTrackChunk_MetricTimes(MidiFileCsvLayout layout, bool orderEvents, string[] csvLines) { if (!orderEvents) { var tmp = csvLines[2]; csvLines[2] = csvLines[5]; csvLines[5] = tmp; } var midiFile = ConvertCsvToMidiFile(layout, TimeSpanType.Metric, csvLines); TempoMap expectedTempoMap; using (var tempoMapManager = new TempoMapManager(new TicksPerQuarterNoteTimeDivision(500))) { tempoMapManager.SetTempo(new MetricTimeSpan(0, 1, 3), new Tempo(300000)); expectedTempoMap = tempoMapManager.TempoMap; } var expectedEvents = new[] { new TimeAndMidiEvent(new MetricTimeSpan(), new NoteOnEvent((SevenBitNumber)50, (SevenBitNumber)120) { Channel = (FourBitNumber)10 }), new TimeAndMidiEvent(new MetricTimeSpan(), new TextEvent("Test")), new TimeAndMidiEvent(new MetricTimeSpan(0, 1, 0), new NoteOnEvent((SevenBitNumber)50, (SevenBitNumber)110) { Channel = (FourBitNumber)7 }), new TimeAndMidiEvent(new MetricTimeSpan(0, 1, 3), new SetTempoEvent(300000)), new TimeAndMidiEvent(new MetricTimeSpan(0, 1, 10), new NoteOffEvent((SevenBitNumber)50, (SevenBitNumber)70) { Channel = (FourBitNumber)10 }), new TimeAndMidiEvent(new MetricTimeSpan(0, 10, 3), new NoteOffEvent((SevenBitNumber)50, (SevenBitNumber)80) { Channel = (FourBitNumber)7 }) } .Select(te => new TimedEvent(te.Event, TimeConverter.ConvertFrom(te.Time, expectedTempoMap))) .ToArray(); Assert.AreEqual(1, midiFile.GetTrackChunks().Count(), "Track chunks count is invalid."); CollectionAssert.AreEqual(midiFile.GetTempoMap().GetTempoChanges(), expectedTempoMap.GetTempoChanges(), "Invalid tempo map."); Assert.AreEqual(new TicksPerQuarterNoteTimeDivision(500), midiFile.TimeDivision, "Invalid time division."); Assert.IsTrue(TimedEventEquality.AreEqual(expectedEvents, midiFile.GetTimedEvents(), false), "Invalid events."); }
public static EventParser Get(string eventName, MidiFileCsvLayout layout) { switch (layout) { case MidiFileCsvLayout.DryWetMidi: return(EventsParsers_DryWetMidi[eventName]); case MidiFileCsvLayout.MidiCsv: return(EventsParsers_MidiCsv[eventName]); } return(null); }
public void ConvertCsvToMidiFile_NewLines(MidiFileCsvLayout layout, string[] csvLines) { var midiFile = ConvertCsvToMidiFile(layout, TimeSpanType.Midi, csvLines); var expectedEvents = new[] { new TimedEvent(new TextEvent($"Test{Environment.NewLine} text wi\rth ne\nw line"), 0), new TimedEvent(new MarkerEvent("Marker"), 100), new TimedEvent(new TextEvent($"Test{Environment.NewLine} text with new line and{Environment.NewLine} new \"line again"), 200), }; MidiAsserts.AreEqual(expectedEvents, midiFile.GetTimedEvents(), false, 0, "Invalid events."); }
public static EventNameGetter Get(Type eventType, MidiFileCsvLayout layout) { switch (layout) { case MidiFileCsvLayout.DryWetMidi: return(EventsTypes_DryWetMidi[eventType]); case MidiFileCsvLayout.MidiCsv: return(EventsTypes_MidiCsv[eventType]); } return(null); }
public void ConvertMidiFileToCsv_SingleTrack(MidiFileCsvLayout layout, string[] expectedCsvLines) { var timedEvents = new[] { new TimedEvent(new TimeSignatureEvent(2, 8), 0), new TimedEvent(new TextEvent("Test text"), 345), new TimedEvent(new NoteOnEvent((SevenBitNumber)23, (SevenBitNumber)78), 350), new TimedEvent(new NoteOffEvent((SevenBitNumber)23, (SevenBitNumber)90), 450), new TimedEvent(new SequencerSpecificEvent(new byte[] { 1, 2, 3 }), 800) }; var midiFile = timedEvents.ToFile(); ConvertMidiFileToCsv(midiFile, layout, TimeSpanType.Midi, expectedCsvLines); }
public void ConvertMidiFileToCsv_StreamIsNotDisposed([Values] MidiFileCsvLayout layout) { var settings = new MidiFileCsvConversionSettings { CsvLayout = layout }; var csvConverter = new CsvConverter(); using (var streamToWrite = new MemoryStream()) { csvConverter.ConvertMidiFileToCsv(new MidiFile(), streamToWrite, settings); Assert.DoesNotThrow(() => { var l = streamToWrite.Length; }); } }
public void ConvertMidiFileToCsv_MultipleTrack(MidiFileCsvLayout layout, NoteFormat noteFormat, NoteNumberFormat noteNumberFormat, string[] expectedCsvLines) { var timedEvents1 = new[] { new TimedEvent(new TimeSignatureEvent(2, 8), 0), new TimedEvent(new TextEvent("Test text"), 345), new TimedEvent(new NoteOnEvent((SevenBitNumber)23, (SevenBitNumber)78), 350), new TimedEvent(new NoteOffEvent((SevenBitNumber)23, (SevenBitNumber)90), 450), new TimedEvent(new SequencerSpecificEvent(new byte[] { 1, 2, 3 }), 800) }; var timedEvents2 = new[] { new TimedEvent(new NoteOnEvent((SevenBitNumber)30, (SevenBitNumber)78), 10), new TimedEvent(new NoteOffEvent((SevenBitNumber)30, (SevenBitNumber)90), 20) }; var midiFile = new MidiFile( timedEvents1.ToTrackChunk(), timedEvents2.ToTrackChunk()); ConvertMidiFileToCsv(midiFile, layout, TimeSpanType.Midi, expectedCsvLines, noteFormat, noteNumberFormat); }
private static MidiFile ConvertCsvToMidiFile(MidiFileCsvLayout layout, TimeSpanType timeType, string[] csvLines) { var filePath = Path.GetTempFileName(); File.WriteAllLines(filePath, csvLines); var settings = new MidiFileCsvConversionSettings { CsvLayout = layout, TimeType = timeType }; try { var midiFile = new CsvConverter().ConvertCsvToMidiFile(filePath, settings); ConvertMidiFileToFromCsv(midiFile, filePath, settings); return(midiFile); } finally { File.Delete(filePath); } }
public void ConvertMidiFileToCsv_EmptyFile(MidiFileCsvLayout layout, string[] expectedCsvLines) { var midiFile = new MidiFile(); ConvertMidiFileToCsv(midiFile, layout, TimeSpanType.Midi, expectedCsvLines); }
public static string[] Get(MidiFileCsvLayout layout) { return(EventsNames[layout]); }