示例#1
0
    def test_raw_events(self):
        events = [
            mud.Event(mud.Note('C4', 1), mud.Time(0)),
            mud.Event(mud.Note('G5', 1), mud.Time(0)),
            mud.Event(mud.Rest(      1), mud.Time(1)),
            mud.Event(mud.Note('C4', 2), mud.Time(2)),
            mud.Event(mud.Note('A4', 2), mud.Time(2)),
        ]
        span = mud.Span(events, length=4, offset=4)
        
        # Test slices which intersect with the first two notes
        slices_first_two = [
            mud.TimeSlice(span, (0.0, 0.4)),
            mud.TimeSlice(span, (0.6, 1.0)),
            mud.TimeSlice(span, (0.3, 0.7)),
            mud.TimeSlice(span, (0.0, 1.0)),
        ]
        for ts in slices_first_two:
            self.assertEqual(ts.num_events(), 2)
            for i, event in enumerate(ts.raw_events()):
                self.assertEqual(event, events[i])
                self.assertLess(i, 2)

        # Test slicing the rest.
        slices_rest = [
            mud.TimeSlice(span, (1.0, 2.0)),
            mud.TimeSlice(span, (1.1, 1.2)),
        ]
        for ts in slices_rest:
            self.assertEqual(ts.num_events(), 1)
            for i, event in enumerate(ts.raw_events()):
                self.assertEqual(event, events[2])
                self.assertLess(i, 1)
示例#2
0
    def test_copy(self):
        n = mud.Note('D5', 0.5)
        t = mud.Time(2)
        event = mud.Event(n, t)
        event2 = mud.Event(event)

        self.assertEqual(event, event2)
        self.assertEqual(event2.unwrap(), n)
        self.assertEqual(event2.time(), t)
示例#3
0
    def test_sliced_events(self):
        events = [
            mud.Event(mud.Note('C4', 1), mud.Time(0)),
            mud.Event(mud.Note('G5', 1), mud.Time(0)),
            mud.Event(mud.Rest(      1), mud.Time(1)),
            mud.Event(mud.Note('C4', 2), mud.Time(2)),
            mud.Event(mud.Note('A4', 2), mud.Time(2)),
        ]
        span = mud.Span(events, length=4, offset=4)

        ts = mud.TimeSlice(span, (2.5, 3.0))
        self.assertEqual(ts.num_events(), 2)

        sliced_events = list(ts.sliced_events())
        self.assertEqual(len(sliced_events), 2)

        self.assertNotEqual(sliced_events[0],
                            mud.Event(mud.Note('C4', 2.0), mud.Time(2)))
        self.assertNotEqual(sliced_events[0],
                            mud.Event(mud.Note('C4', 0.5), mud.Time(2)))
        self.assertEqual(sliced_events[0].time(), mud.Time(2.5))
        self.assertEqual(sliced_events[0].duration(), mud.Time(0.5))
        se0 = mud.SlicedEvent((2.5, 3.0), mud.Event(mud.Note('C4', 2), mud.Time(2)))
        self.assertEqual(sliced_events[0], se0)

        self.assertEqual(sliced_events[1].time(), mud.Time(2.5))
        self.assertEqual(sliced_events[1].duration(), mud.Time(0.5))
        se1 = mud.SlicedEvent((2.5, 3.0), mud.Event(mud.Note('A4', 2), mud.Time(2)))
        self.assertEqual(sliced_events[1], se1)
示例#4
0
    def test_in_span_range(self):
        # Event is from 2.5 to 0.5
        n = mud.Note('D5', 0.5)
        t = mud.Time(2)
        event = mud.Event(n, t)
        # Exact
        self.assertTrue(event.in_span_range((2.0, 2.5)))
        # End before start
        with self.assertRaises(ValueError):
            event.in_span_range((2.5, 2.3))
        # Span starts before
        self.assertTrue(event.in_span_range((1.5, 2.5)))
        # Span ends after
        self.assertTrue(event.in_span_range((2.0, 4.0)))
        # Span starts before and ends after
        self.assertTrue(event.in_span_range((0.0, 3.0)))
        # Span starts inside and ends inside
        self.assertTrue(event.in_span_range((2.3, 2.4)))
        # Span starts inside and ends after
        self.assertTrue(event.in_span_range((2.3, 3.1)))
        # Span starts before and ends inside
        self.assertTrue(event.in_span_range((1.8, 2.4)))

        # Span starts before and ends before
        self.assertFalse(event.in_span_range((1.8, 1.9)))
        # Span starts after and ends after
        self.assertFalse(event.in_span_range((2.6, 5.0)))
示例#5
0
    def test(self):
        f = feature.ContinuingPreviousEvent()
        self.assertEqual(f.dim(), 1)

        event = mud.Event(mud.Note('C#4', mud.Time(4.0)), mud.Time(0.0))
        v = f.make_subvector(event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 0.0)

        # middle slice
        sliced_event = mud.SlicedEvent((2.0, 3.0), event)
        v = f.make_subvector(sliced_event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 1.0)

        # no slice
        sliced_event = mud.SlicedEvent((0.0, 4.0), event)
        v = f.make_subvector(sliced_event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 0.0)

        # slice to end
        sliced_event = mud.SlicedEvent((2.0, 4.0), event)
        v = f.make_subvector(sliced_event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 1.0)
示例#6
0
    def test(self):
        f = feature.ContinuesNextEvent()
        self.assertEqual(f.dim(), 1)

        event = mud.Event(mud.Note('A6', mud.Time(4.0)), mud.Time(0.0))
        v = f.make_subvector(event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 0.0)

        # middle slice
        sliced_event = mud.SlicedEvent((2.0, 3.0), event)
        v = f.make_subvector(sliced_event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 1.0)

        # no slice
        sliced_event = mud.SlicedEvent((0.0, 4.0), event)
        v = f.make_subvector(sliced_event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 0.0)

        # slice from start
        sliced_event = mud.SlicedEvent((0.0, 3.5), event)
        v = f.make_subvector(sliced_event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 1.0)
示例#7
0
 def test(self):
     event = mud.Event(mud.Note('A6', 1.0), 2.0)
     event = mud.SlicedEvent((2.0, 2.5), event)
     # The event is a 1/2 note slice that continues into the next slice.
     event_data = mud.fmt.EventData(event, formatter)
     self.assertEqual(event_data.vec.tolist(),
                      [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0])
     self.assertEqual(event_data.labels, (9, 1))
示例#8
0
    def test(self):
        pitch_labels = label.PitchLabels(octave_range=(4, 6))
        formatter = mud.fmt.EventDataBuilder(features=(
            feature.IsNote(),
            feature.IsRest(),
            feature.NotePitch(pitch_labels),
        ),
                                             labels=(pitch_labels, ))

        # TEST INPUT VECTOR CONSTRUCTION
        event_note = mud.Event(mud.Note('C#4', mud.Time(1.0)), mud.Time(0.0))
        v = formatter.make_vector(event_note)
        self.assertEqual(
            v.shape,
            (12 * 3 + 2, ))  # 3 octaves + 1 note indicator + 1 rest indicator
        note_label = pitch_labels.get_label_of('C#4')
        self.assertEqual(note_label, 1)
        for i in range(v.shape[0]):
            if (i == 0  # The note indicator
                    or i == 2 + note_label):  # The pitch marker
                self.assertAlmostEqual(v[i], 1.0)
            else:
                self.assertAlmostEqual(v[i], 0.0)

        event_rest = mud.Event(mud.Rest(mud.Time(3.0)), mud.Time(1.0))
        v = formatter.make_vector(event_rest)
        self.assertEqual(
            v.shape,
            (12 * 3 + 2, ))  # 3 octaves + 1 note indicator + 1 rest indicator
        for i in range(v.shape[0]):
            if i == 1:  # note indicator
                self.assertAlmostEqual(v[i], 1.0)
            else:
                self.assertAlmostEqual(v[i], 0.0)

        # TEST LABEL GENERATION
        l = formatter.make_labels(event_note)
        self.assertEqual(len(l), 1)
        self.assertEqual(l[0], note_label)
        self.assertEqual(l[0], 1)

        l = formatter.make_labels(event_rest)
        self.assertEqual(len(l), 1)
        self.assertEqual(l[0], None)
示例#9
0
    def test_pitch_labels_with_include_rest(self):
        pitch_labels = label.PitchLabels(octave_range=(4, 6),
                                         include_rest=True)
        formatter = mud.fmt.EventDataBuilder(features=(feature.IsNote(), ),
                                             labels=(pitch_labels, ))
        event_rest = mud.Event(mud.Rest(mud.Time(3.0)), mud.Time(1.0))

        rest_label = pitch_labels.get_label_of(None)
        self.assertEqual(rest_label, pitch_labels.num_labels - 1)
        l = formatter.make_labels(event_rest)
        self.assertEqual(len(l), 1)
        self.assertEqual(l[0], rest_label)
示例#10
0
    def test(self):
        f = feature.NoteLength(resolution=0.5, max_length=4.0)
        self.assertEqual(f.dim(), 8)

        event = mud.Event(mud.Note('E3', 1.0), 2.0)
        v = f.make_subvector(event)

        for i in range(8):
            if i == 2:
                self.assertAlmostEqual(v[i], 1.0)
                continue
            self.assertAlmostEqual(v[i], 0.0)
示例#11
0
    def test(self):
        f = feature.SpanPosition(resolution=0.25, span_length=4.0)
        self.assertEqual(f.dim(), 16)

        event = mud.Event(mud.Note('E3', 1.0), 2.0)
        v = f.make_subvector(event)

        for i in range(16):
            if i == 8:
                self.assertAlmostEqual(v[i], 1.0)
                continue
            self.assertAlmostEqual(v[i], 0.0)
示例#12
0
    def test_creation(self):
        n = mud.Note('G#6', 2)
        t = mud.Time(2)

        event = mud.Event(n, t)
        self.assertEqual(event.unwrap(), n)
        self.assertEqual(event.unwrap(), mud.Note('G#6', mud.Time(2.0)))
        self.assertEqual(event.time(), t)
        self.assertEqual(event.time(), mud.Time(2.0, resolution=0.5))

        (n2, t2) = event
        self.assertEqual(n, n2)
        self.assertEqual(t, t2)
示例#13
0
文件: test_span.py 项目: akortman/mud
    def test(self):
        events = [
            (mud.Note('C4', 1), mud.Time(0)),
            (mud.Note('G5', 1), mud.Time(0)),
            (mud.Rest(1), mud.Time(1)),
            (mud.Note('C4', 2), mud.Time(2)),
            (mud.Note('A4', 2), mud.Time(2)),
        ]
        span = mud.Span(events, length=4, offset=4)
        self.assertAlmostEqual(span.length().in_beats(), 4.0)
        self.assertAlmostEqual(span.offset().in_beats(), 4.0)

        for i, (event, time) in enumerate(events):
            self.assertEqual(span[i], mud.Event(event, time))
示例#14
0
    def test(self):
        f = feature.BooleanFlag('flag')
        self.assertEqual(f.dim(), 1)

        event = mud.Event(mud.Note('A6', mud.Time(4.0)), mud.Time(0.0))

        v = f.make_subvector(event)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 0.0)

        v = f.make_subvector(event, flag=False)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 0.0)

        v = f.make_subvector(event, flag=True)
        self.assertEqual(v.shape, (1, ))
        self.assertAlmostEqual(v[0], 1.0)
示例#15
0
    def test(self):
        l = label.ContinuesNextEventLabel()
        event = mud.Event(mud.Note('A6', mud.Time(4.0)), mud.Time(0.0))
        self.assertEqual(l.get_event_label(event), 0)

        # middle slice
        sliced_event = mud.SlicedEvent((2.0, 3.0), event)
        self.assertFalse(sliced_event.is_note_end())
        self.assertEqual(l.get_event_label(sliced_event), 1)

        # no slice
        sliced_event = mud.SlicedEvent((0.0, 4.0), event)
        self.assertTrue(sliced_event.is_note_end())
        self.assertEqual(l.get_event_label(sliced_event), 0)

        # slice from start
        sliced_event = mud.SlicedEvent((0.0, 3.5), event)
        self.assertFalse(sliced_event.is_note_end())
        self.assertEqual(l.get_event_label(sliced_event), 1)
示例#16
0
文件: test_span.py 项目: akortman/mud
    def test_overlay(self):
        span_a = mud.Span([
            (mud.Note('C4', 1), mud.Time(0)),
            (mud.Note('G5', 1), mud.Time(1)),
        ])
        span_b = mud.Span([
            (mud.Note('A4', 1), mud.Time(0)),
            (mud.Note('C4', 1), mud.Time(1)),
        ])
        events_target = [
            (mud.Note('C4', 1), mud.Time(0)),
            (mud.Note('A4', 1), mud.Time(0)),
            (mud.Note('C4', 1), mud.Time(1)),
            (mud.Note('G5', 1), mud.Time(1)),
        ]

        span_overlaid = mud.Span.overlay(span_a, span_b)
        self.assertAlmostEqual(span_overlaid.length().in_beats(), 2.0)
        self.assertAlmostEqual(span_overlaid.offset().in_beats(), 0.0)
        for i, (event, time) in enumerate(events_target):
            self.assertEqual(span_overlaid[i], mud.Event(event, time))
示例#17
0
文件: test_span.py 项目: akortman/mud
    def test_concat(self):
        span_a = mud.Span([
            (mud.Note('C4', 1), mud.Time(0)),
            (mud.Note('G5', 1), mud.Time(0)),
        ])
        span_b = mud.Span([
            (mud.Rest(1), mud.Time(0)),
            (mud.Note('C4', 2), mud.Time(1)),
            (mud.Note('A4', 2), mud.Time(1)),
        ])
        events_target = [
            (mud.Note('C4', 1), mud.Time(0)),
            (mud.Note('G5', 1), mud.Time(0)),
            (mud.Rest(1), mud.Time(1)),
            (mud.Note('C4', 2), mud.Time(2)),
            (mud.Note('A4', 2), mud.Time(2)),
        ]

        span_concat = mud.Span.concat(span_a, span_b)
        self.assertAlmostEqual(span_concat.length().in_beats(), 4.0)
        self.assertAlmostEqual(span_concat.offset().in_beats(), 0.0)
        for i, (event, time) in enumerate(events_target):
            self.assertEqual(span_concat[i], mud.Event(event, time))
示例#18
0
 def test(self):
     l = label.SpanPosition(resolution=0.25, span_length=4.0)
     self.assertEqual(l.num_labels, 16)
     event = mud.Event(mud.Note('E3', 1.0), 2.0)
     self.assertEqual(l.get_event_label(event), 8)
示例#19
0
import unittest
import mud
import mud.fmt.feature as feature
import mud.fmt.label as label
import numpy as np

note = mud.Event(mud.Note('G7', 2.0), mud.Time(0.0))
rest = mud.Event(mud.Rest(1.0), mud.Time(0.0))


class TestIsNote(unittest.TestCase):
    def test(self):
        f = feature.IsNote()
        self.assertEqual(f.dim(), 1)
        self.assertEqual(f.make_subvector(note).shape, (1, ))
        self.assertEqual(f.make_subvector(note), np.ones(1))
        self.assertEqual(f.make_subvector(note)[0], 1)
        self.assertEqual(f.make_subvector(rest).shape, (1, ))
        self.assertEqual(f.make_subvector(rest), np.zeros(1))
        self.assertEqual(f.make_subvector(rest)[0], 0)


class TestIsRest(unittest.TestCase):
    def test(self):
        f = feature.IsRest()
        self.assertEqual(f.dim(), 1)
        self.assertEqual(f.make_subvector(note).shape, (1, ))
        self.assertEqual(f.make_subvector(note), np.zeros(1))
        self.assertEqual(f.make_subvector(note)[0], 0)
        self.assertEqual(f.make_subvector(rest).shape, (1, ))
        self.assertEqual(f.make_subvector(rest), np.ones(1))
示例#20
0
 def test(self):
     l = label.NoteLength(resolution=0.5, max_length=4.0)
     self.assertEqual(l.num_labels, 8)
     event = mud.Event(mud.Note('E3', 1.0), 2.0)
     self.assertEqual(l.get_event_label(event), 2)
示例#21
0
 def test(self):
     l = label.BooleanFlag('flag')
     event = mud.Event(mud.Note('A6', mud.Time(4.0)), mud.Time(0.0))
     self.assertEqual(l.get_event_label(event), 0)
     self.assertEqual(l.get_event_label(event, flag=False), 0)
     self.assertEqual(l.get_event_label(event, flag=True), 1)