Exemplo n.º 1
0
        public void SplitAtMarker_MultipleMarkers_OrdinalIgnoreCase()
        {
            var marker1 = "A";
            var marker2 = "a";

            var pattern = new PatternBuilder()
                          .Marker(marker1)
                          .Note(Notes.FSharp4)
                          .Note(Notes.DSharp1)
                          .Marker(marker2)
                          .Note(Notes.DSharp0)
                          .Marker(marker1)
                          .Build();

            var patterns = pattern.SplitAtMarker(marker1, true, System.StringComparison.OrdinalIgnoreCase).ToList();

            Assert.AreEqual(2, patterns.Count, "Sub-patterns count is invalid.");

            PatternTestUtilities.TestNotes(patterns[0], new[]
            {
                new NoteInfo(NoteName.FSharp, 4, null, PatternBuilder.DefaultNoteLength),
                new NoteInfo(NoteName.DSharp, 1, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultNoteLength)
            });

            PatternTestUtilities.TestNotes(patterns[1], new[]
            {
                new NoteInfo(NoteName.DSharp, 0, null, PatternBuilder.DefaultNoteLength)
            });
        }
        public void TransformNotes_Selection_SelectAll()
        {
            var noteLength = MusicalTimeSpan.Eighth;
            var velocity   = (SevenBitNumber)90;

            var pattern = new PatternBuilder()
                          .SetNoteLength(noteLength)
                          .SetVelocity(velocity)
                          .Note(Notes.A2)
                          .Note(Notes.C3)
                          .Build();

            pattern = pattern.TransformNotes(
                (i, d) => true,
                d => new NoteDescriptor(
                    d.Note == Notes.A2 ? d.Note.Transpose(Interval.Two) : d.Note.Transpose(-Interval.Three),
                    (SevenBitNumber)(d.Velocity - 10),
                    d.Length.Subtract(MusicalTimeSpan.ThirtySecond, TimeSpanMode.LengthLength)));

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.B, 2, null, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80),
                new NoteInfo(NoteName.A, 2, 3 * MusicalTimeSpan.ThirtySecond, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80)
            });
        }
        public void CombineInParallel_No_Final_Move()
        {
            var pattern1 = new PatternBuilder()
                           .Note(Notes.DSharp2)
                           .Build();

            var noteLength = MusicalTimeSpan.Sixteenth;
            var pattern2   = new PatternBuilder()
                             .SetNoteLength(noteLength)
                             .Note(Notes.A4)
                             .Note(Notes.ASharp4)
                             .Build();

            var parallelPatterns = new[] { pattern1, pattern2 }.CombineInParallel();

            var pattern = new PatternBuilder()
                          .Pattern(parallelPatterns)
                          .Note(Notes.C4) // <-- this note should play AFTER the end of the parallel patterns
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.DSharp, 2, null, PatternBuilder.DefaultNoteLength),

                new NoteInfo(NoteName.A, 4, null, noteLength),
                new NoteInfo(NoteName.ASharp, 4, noteLength, noteLength),

                new NoteInfo(NoteName.C, 4, noteLength * 2, PatternBuilder.DefaultNoteLength),
            });
        }
Exemplo n.º 4
0
        public void TransformChords_Selection_SelectAll()
        {
            var noteLength = MusicalTimeSpan.Eighth;
            var velocity   = (SevenBitNumber)90;

            var pattern = new PatternBuilder()
                          .SetNoteLength(noteLength)
                          .SetVelocity(velocity)
                          .Chord(new[] { Notes.A0, Notes.CSharp2 })
                          .Chord(new[] { Notes.B2, Notes.B3, Notes.B4 })
                          .Build();

            pattern = pattern.TransformChords(
                (i, d) => true,
                d => new ChordDescriptor(
                    new[] { Notes.A2 },
                    SevenBitNumber.MinValue,
                    MusicalTimeSpan.Half));

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 2, null, MusicalTimeSpan.Half, SevenBitNumber.MinValue),
                new NoteInfo(NoteName.A, 2, MusicalTimeSpan.Half, MusicalTimeSpan.Half, SevenBitNumber.MinValue),
            });
        }
        public void Pattern()
        {
            var noteLength1 = MusicalTimeSpan.Quarter;
            var pattern1    = new PatternBuilder()
                              .SetNoteLength(noteLength1)
                              .Note(Notes.A0)
                              .Note(Notes.C1)
                              .Build();

            var noteLength2 = MusicalTimeSpan.Quarter;
            var pattern2    = new PatternBuilder()
                              .SetNoteLength(noteLength2)
                              .Note(Notes.ASharp2)
                              .Note(Notes.CSharp2)
                              .Pattern(pattern1)
                              .Build();

            PatternTestUtilities.TestNotes(pattern2, new[]
            {
                new NoteInfo(NoteName.ASharp, 2, null, noteLength2),
                new NoteInfo(NoteName.CSharp, 2, noteLength2, noteLength2),
                new NoteInfo(NoteName.A, 0, 2 * noteLength2, noteLength1),
                new NoteInfo(NoteName.C, 1, 2 * noteLength2 + noteLength1, noteLength1)
            });
        }
        public void TransformNotes_Selection_SelectSome_ByIndex_Pattern_Recursive()
        {
            var noteLength = MusicalTimeSpan.Eighth;
            var velocity   = (SevenBitNumber)90;

            var subPattern = new PatternBuilder()
                             .Note(Notes.DSharp3)
                             .Note(Notes.B1)
                             .Build();

            var pattern = new PatternBuilder()
                          .SetNoteLength(noteLength)
                          .SetVelocity(velocity)
                          .Note(Notes.A2)
                          .Note(Notes.C3)
                          .Pattern(subPattern)
                          .Build();

            pattern = pattern.TransformNotes(
                (i, d) => i == 1 || i == 2,
                d => new NoteDescriptor(Notes.D9, (SevenBitNumber)65, (MidiTimeSpan)100));

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 2, null, noteLength, velocity),
                new NoteInfo(NoteName.D, 9, noteLength, (MidiTimeSpan)100, (SevenBitNumber)65),

                new NoteInfo(NoteName.D, 9, noteLength.Add((MidiTimeSpan)100, TimeSpanMode.TimeLength), (MidiTimeSpan)100, (SevenBitNumber)65),
                new NoteInfo(NoteName.B, 1, noteLength.Add((MidiTimeSpan)200, TimeSpanMode.TimeLength), PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity)
            });
        }
Exemplo n.º 7
0
        public void Chord_Interval()
        {
            var defaultNoteLength = MusicalTimeSpan.Quarter;
            var defaultVelocity   = (SevenBitNumber)90;

            var pattern = new PatternBuilder()
                          .SetNoteLength(defaultNoteLength)
                          .SetVelocity(defaultVelocity)
                          .SetRootNote(Notes.CSharp5)

                          .Chord(new[] { Interval.Two, Interval.Five }, Notes.A2)
                          .Chord(new[] { Interval.Two, -Interval.Ten }, Notes.B2)

                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 2, null, defaultNoteLength, defaultVelocity),
                new NoteInfo(NoteName.B, 2, null, defaultNoteLength, defaultVelocity),
                new NoteInfo(NoteName.D, 3, null, defaultNoteLength, defaultVelocity),

                new NoteInfo(NoteName.B, 2, defaultNoteLength, defaultNoteLength, defaultVelocity),
                new NoteInfo(NoteName.CSharp, 3, defaultNoteLength, defaultNoteLength, defaultVelocity),
                new NoteInfo(NoteName.CSharp, 2, defaultNoteLength, defaultNoteLength, defaultVelocity),
            });
        }
Exemplo n.º 8
0
        public void Chord_DefaultOctave()
        {
            var defaultVelocity = (SevenBitNumber)90;
            var defaultOctave   = Octave.Get(2);

            var chordLength = MusicalTimeSpan.Sixteenth.Triplet();
            var chordTime1  = new MetricTimeSpan(0, 1, 12);
            var chordTime2  = chordTime1.Add(chordLength, TimeSpanMode.TimeLength);

            var pattern = new PatternBuilder()
                          .SetVelocity(defaultVelocity)
                          .SetOctave(defaultOctave)

                          .MoveToTime(chordTime1)
                          .Chord(new[]
            {
                NoteName.C,
                NoteName.G
            }, chordLength)
                          .Repeat()

                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.C, defaultOctave.Number, chordTime1, chordLength, defaultVelocity),
                new NoteInfo(NoteName.G, defaultOctave.Number, chordTime1, chordLength, defaultVelocity),
                new NoteInfo(NoteName.C, defaultOctave.Number, chordTime2, chordLength, defaultVelocity),
                new NoteInfo(NoteName.G, defaultOctave.Number, chordTime2, chordLength, defaultVelocity)
            });
        }
Exemplo n.º 9
0
        public void TransformChords_Changed()
        {
            var noteLength = MusicalTimeSpan.Eighth;
            var velocity   = (SevenBitNumber)90;

            var pattern = new PatternBuilder()
                          .SetNoteLength(noteLength)
                          .SetVelocity(velocity)
                          .Chord(new[] { Notes.A0, Notes.CSharp2 })
                          .Chord(new[] { Notes.B2, Notes.B3, Notes.B4 })
                          .Build();

            pattern = pattern.TransformChords(d => new ChordDescriptor(
                                                  d.Notes.Count() == 2 ? d.Notes.Select(n => n.Transpose(Interval.Two)) : d.Notes.Select(n => n.Transpose(-Interval.Three)),
                                                  (SevenBitNumber)(d.Velocity - 10),
                                                  d.Length.Subtract(MusicalTimeSpan.ThirtySecond, TimeSpanMode.LengthLength)));

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.B, 0, null, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80),
                new NoteInfo(NoteName.DSharp, 2, null, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80),

                new NoteInfo(NoteName.GSharp, 2, 3 * MusicalTimeSpan.ThirtySecond, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80),
                new NoteInfo(NoteName.GSharp, 3, 3 * MusicalTimeSpan.ThirtySecond, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80),
                new NoteInfo(NoteName.GSharp, 4, 3 * MusicalTimeSpan.ThirtySecond, 3 * MusicalTimeSpan.ThirtySecond, (SevenBitNumber)80)
            });
        }
Exemplo n.º 10
0
        public void TransformNotes_Changed_Pattern_NonRecursive()
        {
            var noteLength = MusicalTimeSpan.Eighth;
            var velocity   = (SevenBitNumber)90;

            var subPattern = new PatternBuilder()
                             .Note(Notes.DSharp3)
                             .Note(Notes.B1)
                             .Build();

            var pattern = new PatternBuilder()
                          .SetNoteLength(noteLength)
                          .SetVelocity(velocity)
                          .Note(Notes.A2)
                          .Note(Notes.C3)
                          .Pattern(subPattern)
                          .Build();

            pattern = pattern.TransformNotes(d => new NoteDescriptor(Notes.D9, (SevenBitNumber)65, (MidiTimeSpan)100), recursive: false);

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.D, 9, null, (MidiTimeSpan)100, (SevenBitNumber)65),
                new NoteInfo(NoteName.D, 9, (MidiTimeSpan)100, (MidiTimeSpan)100, (SevenBitNumber)65),

                new NoteInfo(NoteName.DSharp, 3, (MidiTimeSpan)200, PatternBuilder.DefaultNoteLength),
                new NoteInfo(NoteName.B, 1, new MidiTimeSpan(200).Add(PatternBuilder.DefaultNoteLength, TimeSpanMode.LengthLength), PatternBuilder.DefaultNoteLength)
            });
        }
Exemplo n.º 11
0
        public void TransformChords_Changed_Pattern_NonRecursive()
        {
            var noteLength = (MidiTimeSpan)200;
            var velocity   = (SevenBitNumber)90;

            var subPattern = new PatternBuilder()
                             .Chord(new[] { Notes.A0, Notes.CSharp2 })
                             .Build();

            var pattern = new PatternBuilder()
                          .SetNoteLength(noteLength)
                          .SetVelocity(velocity)
                          .Chord(new[] { Notes.A2, Notes.C3 })
                          .Pattern(subPattern)
                          .Build();

            pattern = pattern.TransformChords(d => new ChordDescriptor(
                                                  d.Notes.Select(n => n.Transpose(Interval.One)),
                                                  (SevenBitNumber)65,
                                                  (MidiTimeSpan)100),
                                              recursive: false);

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.ASharp, 2, null, (MidiTimeSpan)100, (SevenBitNumber)65),
                new NoteInfo(NoteName.CSharp, 3, null, (MidiTimeSpan)100, (SevenBitNumber)65),

                new NoteInfo(NoteName.A, 0, new MidiTimeSpan(100), PatternBuilder.DefaultNoteLength),
                new NoteInfo(NoteName.CSharp, 2, new MidiTimeSpan(100), PatternBuilder.DefaultNoteLength)
            });
        }
Exemplo n.º 12
0
        public void SetChordsState_SelectAll_Excluded()
        {
            var pattern = new PatternBuilder()
                          .Chord(new[] { Notes.A2 })
                          .Chord(new[] { Notes.D3, Notes.ASharp5 })
                          .Build();

            pattern.SetChordsState((i, d) => true, PatternActionState.Excluded);

            PatternTestUtilities.TestNotes(pattern, new NoteInfo[] { });
        }
Exemplo n.º 13
0
        public void SetNotesState_SelectAll_Excluded()
        {
            var pattern = new PatternBuilder()
                          .Note(Notes.A2)
                          .Note(Notes.D3)
                          .Build();

            pattern.SetNotesState((i, d) => true, PatternActionState.Excluded);

            PatternTestUtilities.TestNotes(pattern, new NoteInfo[] { });
        }
Exemplo n.º 14
0
        public void MoveToTime()
        {
            var pattern = new PatternBuilder()
                          .MoveToTime(new MetricTimeSpan(1, 0, 0))
                          .Note(Notes.A0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, new MetricTimeSpan(1, 0, 0), PatternBuilder.DefaultNoteLength)
            });
        }
Exemplo n.º 15
0
        public void StepForward_DefaultStep()
        {
            var pattern = new PatternBuilder()
                          .StepForward()
                          .Note(Notes.A0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, PatternBuilder.DefaultStep, PatternBuilder.DefaultNoteLength)
            });
        }
Exemplo n.º 16
0
        public void StepForward()
        {
            var pattern = new PatternBuilder()
                          .StepForward(new MetricTimeSpan(0, 0, 30))
                          .Note(Notes.A0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, new MetricTimeSpan(0, 0, 30), PatternBuilder.DefaultNoteLength)
            });
        }
Exemplo n.º 17
0
        public void StepBack_DefaultStep()
        {
            var pattern = new PatternBuilder()
                          .MoveToTime(MusicalTimeSpan.Whole)
                          .StepBack()
                          .Note(Notes.A0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, MusicalTimeSpan.Half.SingleDotted(), MusicalTimeSpan.Quarter)
            });
        }
        public void Chord_Chord_Velocity()
        {
            var pattern = new PatternBuilder()
                          .SetVelocity((SevenBitNumber)80)
                          .Chord(new DryWetMidi.MusicTheory.Chord(NoteName.A, NoteName.C), (SevenBitNumber)70)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, PatternBuilder.DefaultOctave.Number, null, PatternBuilder.DefaultNoteLength, (SevenBitNumber)70),
                new NoteInfo(NoteName.C, PatternBuilder.DefaultOctave.Number + 1, null, PatternBuilder.DefaultNoteLength, (SevenBitNumber)70)
            });
        }
Exemplo n.º 19
0
        public void StepForward_CustomStep()
        {
            var pattern = new PatternBuilder()
                          .SetStep(MusicalTimeSpan.Sixteenth)
                          .StepForward()
                          .Note(Notes.A0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, MusicalTimeSpan.Sixteenth, PatternBuilder.DefaultNoteLength)
            });
        }
Exemplo n.º 20
0
        public void SetNotesState_SelectSome_Excluded()
        {
            var pattern = new PatternBuilder()
                          .Note(Notes.A2)
                          .Note(Notes.D3)
                          .Build();

            pattern.SetNotesState((i, d) => d.Note == Notes.A2, PatternActionState.Excluded);

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.D, 3, null, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity)
            });
        }
        public void Chord_Chord_Octave_Length()
        {
            var pattern = new PatternBuilder()
                          .SetNoteLength(MusicalTimeSpan.Whole)
                          .SetOctave(Octave.Get(7))
                          .Chord(new DryWetMidi.MusicTheory.Chord(NoteName.A, NoteName.C), Octave.Get(2), MusicalTimeSpan.Eighth)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 2, null, MusicalTimeSpan.Eighth, PatternBuilder.DefaultVelocity),
                new NoteInfo(NoteName.C, 3, null, MusicalTimeSpan.Eighth, PatternBuilder.DefaultVelocity)
            });
        }
Exemplo n.º 22
0
        public void StepBack_CustomStep()
        {
            var pattern = new PatternBuilder()
                          .SetStep(MusicalTimeSpan.Sixteenth)
                          .MoveToTime(MusicalTimeSpan.Whole)
                          .StepBack()
                          .Note(Notes.A0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, 15 * MusicalTimeSpan.Sixteenth, MusicalTimeSpan.Quarter)
            });
        }
Exemplo n.º 23
0
        public void Marker_Single()
        {
            var pattern = new PatternBuilder()

                          .Note(NoteName.A)
                          .Marker("Marker 1")

                          .Build();

            PatternTestUtilities.TestTimedEvents(pattern, new[]
            {
                new TimedEventInfo(new MarkerEvent("Marker 1"), MusicalTimeSpan.Quarter)
            });
        }
Exemplo n.º 24
0
        public void Lyrics_Single()
        {
            var pattern = new PatternBuilder()

                          .Note(NoteName.A)
                          .Lyrics("A")

                          .Build();

            PatternTestUtilities.TestTimedEvents(pattern, new[]
            {
                new TimedEventInfo(new LyricEvent("A"), MusicalTimeSpan.Quarter)
            });
        }
Exemplo n.º 25
0
        public void MoveToPreviousTime()
        {
            var pattern = new PatternBuilder()
                          .Note(Notes.A0)
                          .MoveToPreviousTime()
                          .Note(Notes.B0)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 0, null, PatternBuilder.DefaultNoteLength),
                new NoteInfo(NoteName.B, 0, null, PatternBuilder.DefaultNoteLength)
            });
        }
        public void Chord_Chord_Octave_Length_Velocity()
        {
            var pattern = new PatternBuilder()
                          .SetVelocity((SevenBitNumber)80)
                          .SetOctave(Octave.Get(8))
                          .SetNoteLength(MusicalTimeSpan.ThirtySecond)
                          .Chord(new DryWetMidi.MusicTheory.Chord(NoteName.A, NoteName.C), Octave.Get(1), MusicalTimeSpan.Half, (SevenBitNumber)70)
                          .Build();

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 1, null, MusicalTimeSpan.Half, (SevenBitNumber)70),
                new NoteInfo(NoteName.C, 2, null, MusicalTimeSpan.Half, (SevenBitNumber)70)
            });
        }
Exemplo n.º 27
0
        public void SetChordsState_SelectSome_Excluded()
        {
            var pattern = new PatternBuilder()
                          .Chord(new[] { Notes.A2 })
                          .Chord(new[] { Notes.D3, Notes.ASharp5 })
                          .Build();

            pattern.SetChordsState((i, d) => d.Notes.Contains(Notes.A2), PatternActionState.Excluded);

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.D, 3, null, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity),
                new NoteInfo(NoteName.ASharp, 5, null, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity)
            });
        }
Exemplo n.º 28
0
        public void SetNotesState_SelectAll_Enabled()
        {
            var pattern = new PatternBuilder()
                          .Note(Notes.A2)
                          .Note(Notes.D3)
                          .Build();

            pattern.SetNotesState((i, d) => true, PatternActionState.Enabled);

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 2, null, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity),
                new NoteInfo(NoteName.D, 3, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity)
            });
        }
        public void BuildFromPattern_Notes()
        {
            var pattern1 = new PatternBuilder()
                           .Note(Notes.A4)
                           .Note(Notes.ASharp4)
                           .Build();

            var pattern2 = new PatternBuilder(pattern1).Build();

            PatternTestUtilities.TestNotes(pattern2, new[]
            {
                new NoteInfo(NoteName.A, 4, null, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity),
                new NoteInfo(NoteName.ASharp, 4, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity)
            });
        }
Exemplo n.º 30
0
        public void SetNotesState_SelectNone([Values] PatternActionState state)
        {
            var pattern = new PatternBuilder()
                          .Note(Notes.A2)
                          .Note(Notes.D3)
                          .Build();

            pattern.SetNotesState((i, d) => false, PatternActionState.Excluded);

            PatternTestUtilities.TestNotes(pattern, new[]
            {
                new NoteInfo(NoteName.A, 2, null, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity),
                new NoteInfo(NoteName.D, 3, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultNoteLength, PatternBuilder.DefaultVelocity)
            });
        }