public void NotesToCsv_MetricTime(NoteNumberFormat noteNumberFormat, string[] csvLines) { ConvertNotesToCsv( new[] { new NoteWithCustomTimeAndLength(90, 2, 80, 56, new MetricTimeSpan(0, 0, 0, 500), (MidiTimeSpan)100), new NoteWithCustomTimeAndLength(92, 0, 70, 0, new MetricTimeSpan(), (MidiTimeSpan)10), new NoteWithCustomTimeAndLength(92, 0, 72, 30, new MetricTimeSpan(0, 0, 1), (MidiTimeSpan)0) }, TempoMap.Default, TimeSpanType.Metric, csvLines, noteNumberFormat); }
public void CsvToNotes_MidiTime(NoteNumberFormat noteNumberFormat, string[] csvLines) { ConvertCsvToNotes( new[] { new NoteWithCustomTimeAndLength(90, 2, 80, 56, (MidiTimeSpan)100, (MidiTimeSpan)100), new NoteWithCustomTimeAndLength(92, 0, 70, 0, (MidiTimeSpan)0, (MidiTimeSpan)10), new NoteWithCustomTimeAndLength(92, 0, 72, 30, (MidiTimeSpan)10, (MidiTimeSpan)0) }, TempoMap.Default, TimeSpanType.Midi, csvLines, noteNumberFormat); }
public void ConvertCsvToMidiFile_NoteLength_Metric(NoteNumberFormat noteNumberFormat, string[] csvLines) { var midiFile = ConvertCsvToMidiFile(MidiFileCsvLayout.DryWetMidi, TimeSpanType.Midi, csvLines, NoteFormat.Note, noteNumberFormat, TimeSpanType.Metric); var tempoMap = TempoMap.Default; var expectedObjects = new ITimedObject[] { new Note((SevenBitNumber)50, LengthConverter.ConvertFrom(new MetricTimeSpan(0, 0, 10), 0, tempoMap), 0) { Channel = (FourBitNumber)10, Velocity = (SevenBitNumber)120, OffVelocity = (SevenBitNumber)70 }, new TimedEvent(new TextEvent("Te\"s\"\"t"), 0), new Note((SevenBitNumber)70, LengthConverter.ConvertFrom(new MetricTimeSpan(0, 0, 0, 500), 100, tempoMap), 100) { Channel = (FourBitNumber)7, Velocity = (SevenBitNumber)110, OffVelocity = (SevenBitNumber)80 } }; Assert.AreEqual(1, midiFile.GetTrackChunks().Count(), "Track chunks count is invalid."); MidiAsserts.AreEqual( expectedObjects, midiFile.GetObjects(ObjectType.TimedEvent | ObjectType.Note), false, 0, "Invalid objects."); }
public static bool TryParseNoteNumber(string input, NoteNumberFormat noteNumberFormat, out SevenBitNumber result) { result = default(SevenBitNumber); switch (noteNumberFormat) { case NoteNumberFormat.NoteNumber: return(SevenBitNumber.TryParse(input, out result)); case NoteNumberFormat.Letter: { MusicTheory.Note note; if (!MusicTheory.Note.TryParse(input, out note)) { return(false); } result = note.NoteNumber; return(true); } } return(false); }
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); }