Example #1
0
 def test_height(self):
     # 5 lines
     assert_almost_equal(
         Staff((Mm(0), Mm(0)),
               Mm(100),
               self.flowable,
               staff_unit=Mm(1.5),
               line_count=5).height,
         Mm(6),
     )
     assert_almost_equal(
         Staff((Mm(0), Mm(0)),
               Mm(100),
               self.flowable,
               staff_unit=Mm(1),
               line_count=5).height,
         Mm(4),
     )
     # 4 lines
     assert_almost_equal(
         Staff((Mm(0), Mm(0)),
               Mm(100),
               self.flowable,
               staff_unit=Mm(1.5),
               line_count=4).height,
         Mm(4.5),
     )
     assert_almost_equal(
         Staff((Mm(0), Mm(0)),
               Mm(100),
               self.flowable,
               staff_unit=Mm(1),
               line_count=4).height,
         Mm(3),
     )
Example #2
0
 def test_ledgers_needed_from_position_with_odd_line_count(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable, line_count=5)
     # Inside the staff, no ledgers
     assert staff.ledgers_needed_for_y(staff.unit(0)) == []
     assert staff.ledgers_needed_for_y(staff.unit(4)) == []
     # Just outside the staff, no ledgers
     assert staff.ledgers_needed_for_y(staff.unit(-0.5)) == []
     assert staff.ledgers_needed_for_y(staff.unit(4.5)) == []
     # Right on the first ledger
     assert staff.ledgers_needed_for_y(staff.unit(-1)) == [staff.unit(-1)]
     assert staff.ledgers_needed_for_y(staff.unit(5)) == [staff.unit(5)]
     # Further outside with multiple ledgers, directly on lines
     assert staff.ledgers_needed_for_y(staff.unit(6)) == [
         staff.unit(6),
         staff.unit(5),
     ]
     assert staff.ledgers_needed_for_y(staff.unit(-2)) == [
         staff.unit(-2),
         staff.unit(-1),
     ]
     # Further outside with multiple ledgers, between lines
     assert staff.ledgers_needed_for_y(staff.unit(6.5)) == [
         staff.unit(6),
         staff.unit(5),
     ]
     assert staff.ledgers_needed_for_y(staff.unit(-2.5)) == [
         staff.unit(-2),
         staff.unit(-1),
     ]
Example #3
0
 def test_middle_c_at_with_explicit_clefs(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     Clef(staff, Mm(0), "treble")
     Clef(staff, Mm(10), "bass")
     # Test between two clefs should be in treble mode
     assert staff.middle_c_at(Mm(1)) == staff.unit(5)
     # Test after bass clef goes into effect
     assert staff.middle_c_at(Mm(11)) == staff.unit(-1)
Example #4
0
 def test_position_on_ledger_with_odd_line_count(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable, line_count=5)
     assert staff.y_on_ledger(staff.unit(-1)) is True
     assert staff.y_on_ledger(staff.unit(-0.5)) is False
     assert staff.y_on_ledger(staff.unit(0)) is False
     assert staff.y_on_ledger(staff.unit(4)) is False
     assert staff.y_on_ledger(staff.unit(4.5)) is False
     assert staff.y_on_ledger(staff.unit(5)) is True
Example #5
0
 def setUp(self):
     neoscore.setup()
     self.staff = Staff((Mm(0), Mm(0)),
                        Mm(100),
                        flowable=None,
                        staff_unit=Mm(1))
     self.font = MusicFont(constants.DEFAULT_MUSIC_FONT_NAME,
                           self.staff.unit)
Example #6
0
 def test_active_clef_at_with_explicit_clefs(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     Clef(staff, Mm(0), "treble")
     Clef(staff, Mm(10), "bass")
     # Test between two clefs should have treble in effect
     assert staff.active_clef_at(Mm(1)).clef_type == ClefType.TREBLE
     # Test after bass clef goes into effect
     assert staff.active_clef_at(Mm(11)).clef_type == ClefType.BASS
Example #7
0
 def setUp(self):
     neoscore.setup()
     self.flowable = Flowable((Mm(0), Mm(0)), Mm(10000), Mm(30), Mm(5))
     self.staff = Staff((Mm(0), Mm(0)), Mm(5000), self.flowable)
     self.left_parent = MockStaffObject((Mm(0), Mm(0)), self.staff)
     self.right_parent = MockStaffObject((Mm(10), Mm(2)), self.staff)
     self.char = "gClef"
     self.single_repetition_width = MusicText((Mm(0), Mm(0)),
                                              self.char,
                                              self.staff,
                                              scale=2).bounding_rect.width
Example #8
0
 def test_active_transposition_at_with_octave_line_with_staff_parent(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     octave_line = OctaveLine((Mm(20), Mm(0)),
                              staff,
                              Mm(80),
                              indication="8va")
     assert staff.active_transposition_at(Mm(0)) is None
     assert staff.active_transposition_at(
         Mm(20)) == octave_line.transposition
     assert staff.active_transposition_at(
         Mm(100)) == octave_line.transposition
     assert staff.active_transposition_at(Mm(101)) is None
Example #9
0
 def test_middle_c_at_with_active_octave_line(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     Clef(staff, Mm(0), "treble")
     octave_line = OctaveLine((Mm(20), Mm(0)),
                              staff,
                              Mm(80),
                              indication="8va")
     # Before octave_line goes into effect
     assert staff.middle_c_at(Mm(0)) == staff.unit(5)
     # While octave_line is in effect
     assert staff.middle_c_at(Mm(20)) == staff.unit(8.5)
     assert staff.middle_c_at(Mm(100)) == staff.unit(8.5)
     # After octave_line ends
     assert staff.middle_c_at(Mm(101)) == staff.unit(5)
Example #10
0
    def test_elements_when_not_located_at_origin(self):
        """Regression test

        Ensure lines are drawn at the correct locations when staff is not
        positioned at (0, 0)
        """
        staff = Staff((Mm(2), Mm(3)),
                      Mm(10),
                      self.flowable,
                      staff_unit=Mm(1),
                      line_count=5)
        staff._render()
        # Top line
        assert staff.elements[0].pos == Point(Mm(0), Mm(0))
        assert staff.elements[0].parent == staff
        assert staff.elements[1].pos == Point(Mm(10), Mm(0))
        assert staff.elements[1].parent == staff
        # Second line
        assert staff.elements[2].pos == Point(Mm(0), Mm(1))
        assert staff.elements[2].parent == staff
        assert staff.elements[3].pos == Point(Mm(10), Mm(1))
        assert staff.elements[3].parent == staff
Example #11
0
 def setUp(self):
     neoscore.setup(Paper(*[Mm(val) for val in [210, 297, 20, 20, 20, 20, 10]]))
     self.flowable = Flowable((Mm(0), Mm(0)), Mm(10000), Mm(30), Mm(5))
     self.staff = Staff((Mm(0), Mm(0)), Mm(5000), self.flowable)
Example #12
0
 def test_active_clef_at_with_implicit_default_clef(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     assert staff.active_clef_at(Mm(5)) is None
Example #13
0
 def setUp(self):
     neoscore.setup()
     self.flowable = Flowable(Point(Mm(0), Mm(0)), Mm(10000), Mm(100))
     self.staff = Staff(Point(Mm(0), Mm(0)), Mm(100), self.flowable)
     Clef(self.staff, Mm(0), "treble")
Example #14
0
 def setUp(self):
     neoscore.setup()
     self.flowable = Flowable((Mm(0), Mm(0)), Mm(10000), Mm(30), Mm(5))
     self.staff = Staff((Mm(0), Mm(0)), Mm(5000), self.flowable)
     self.left_parent = MockStaffObject((Unit(0), Unit(0)), self.staff)
     self.right_parent = MockStaffObject((Unit(10), Unit(2)), self.staff)
Example #15
0
 def test_position_inside_staff_with_even_line_count(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable, line_count=4)
     assert staff.y_inside_staff(staff.unit(0)) is True
     assert staff.y_inside_staff(staff.unit(3)) is True
     assert staff.y_inside_staff(staff.unit(4)) is False
     assert staff.y_inside_staff(staff.unit(-4)) is False
Example #16
0
 def test_middle_c_at_with_implicit_default_clef(self):
     staff = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     with pytest.raises(NoClefError):
         staff.middle_c_at(Mm(5))
Example #17
0
 def setUp(self):
     neoscore.setup()
     self.staff = Staff((Mm(0), Mm(0)), Mm(100), flowable=None)
Example #18
0
 def test_distance_to_next_of_type(self):
     staff = Staff((Mm(10), Mm(0)), Mm(100), self.flowable)
     treble = Clef(staff, Mm(11), "treble")
     bass = Clef(staff, Mm(31), "bass")
     assert_almost_equal(staff.distance_to_next_of_type(treble), Mm(20))
     assert_almost_equal(staff.distance_to_next_of_type(bass), Mm(100 - 31))
Example #19
0
 def setUp(self):
     neoscore.setup()
     self.flowable = Flowable((Mm(0), Mm(0)), Mm(10000), Mm(30), Mm(5))
     self.staff = Staff((Mm(0), Mm(0)), Mm(10000), flowable=self.flowable)
     Clef(self.staff, Mm(0), "treble")
Example #20
0
 def setUp(self):
     neoscore.setup()
     self.flowable = Flowable((Mm(0), Mm(0)), Mm(10000), Mm(30), Mm(5))
     self.staff_1 = Staff((Mm(0), Mm(0)), Mm(100), self.flowable)
     self.staff_2 = Staff((Mm(0), Mm(30)), Mm(100), self.flowable)
     self.staff_3 = Staff((Mm(0), Mm(50)), Mm(100), self.flowable)