Ejemplo n.º 1
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        sf = SimpleFormat(quarter_durations=[4, 4, 4, 4, 4])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)
        self.score.get_measure(3).add_page_break()

        result_path = path + '_test_1'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)

    def test_2(self):
        sf = SimpleFormat(quarter_durations=[4, 4, 4, 4, 4])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score, 1)
        sf = SimpleFormat(quarter_durations=[4, 4, 4, 4, 4])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score, 2)
        self.score.get_measure(3).add_page_break()

        result_path = path + '_test_2'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)
Ejemplo n.º 2
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()
        sf = SimpleFormat(quarter_durations=[1, 1])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score, part_number=1, first_measure=1)

        sf = SimpleFormat(quarter_durations=[1, 1])
        v = sf.to_stream_voice(2)
        v.add_to_score(self.score, part_number=1, first_measure=1)

        sf = SimpleFormat(quarter_durations=[1, 1])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score, part_number=2, first_measure=2)

    def test_1(self):
        chord = self.score.get_measure(1).get_part(1).get_staff(1).get_voice(
            1).chords[1]
        self.assertEqual(chord.__name__, '1.1.1.2')
        chord = self.score.get_measure(1).get_part(1).get_staff(1).get_voice(
            2).chords[0]
        self.assertEqual(chord.__name__, '1.1.2.1')
        chord = self.score.get_measure(2).get_part(2).get_staff(1).get_voice(
            1).chords[1]
        self.assertEqual(chord.__name__, '2.2.1.2')
Ejemplo n.º 3
0
class Test(XMLTestCase):

    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        xml_path = path + '_test_1.xml'
        sf = SimpleFormat(quarter_durations=4, midis=0)
        sf.to_stream_voice().add_to_score(self.score)
        self.score.get_measure(1).get_part(1).add_clef(BASS_CLEF)
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)
Ejemplo n.º 4
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        self.score.add_measure()
        self.score.add_part()
        self.score.get_measure(1).get_part(1).add_metronome(
            beat_unit='quarter', per_minute=60, relative_y=15)
        result_path = path + '_test_1'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)
Ejemplo n.º 5
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        sf_1 = SimpleFormat(quarter_durations=[2, 2], midis=[0, 71])
        sf_1.to_stream_voice().add_to_score(self.score, staff_number=1)

        sf_2 = SimpleFormat(quarter_durations=[2, 2], midis=[71, 0])
        sf_2.to_stream_voice().add_to_score(self.score, staff_number=2)

        first_staff = self.score.get_measure(1).get_part(1)
        staff_details = first_staff.attributes.add_child(StaffDetails())
        staff_details.add_child(StaffLines(1))
        xml_path = path + '_test_1.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_2(self):
        sf_1 = SimpleFormat(quarter_durations=[2, 2], midis=[0, 71])
        sf_1.to_stream_voice().add_to_score(self.score, staff_number=1)

        sf_2 = SimpleFormat(quarter_durations=[2, 2], midis=[71, 0])
        sf_2.to_stream_voice().add_to_score(self.score, staff_number=2)

        first_staff = self.score.get_measure(1).get_part(1)
        staff_details = first_staff.attributes.add_child(StaffDetails())
        staff_details.add_child(StaffSize(65))
        xml_path = path + '_test_2.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_3(self):
        sf_1 = SimpleFormat(quarter_durations=[2, 2], midis=[0, 71])
        sf_1.to_stream_voice().add_to_score(self.score, staff_number=1)

        sf_2 = SimpleFormat(quarter_durations=[2, 2], midis=[71, 0])
        sf_2.to_stream_voice().add_to_score(self.score, staff_number=2)

        first_staff = self.score.get_measure(1).get_part(1)
        staff_details = first_staff.attributes.add_child(
            StaffDetails(number=1))
        staff_details.add_child(StaffLines(1))
        staff_details = first_staff.attributes.add_child(
            StaffDetails(number=1))
        staff_details.add_child(StaffSize(65))

        xml_path = path + '_test_3.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)
Ejemplo n.º 6
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()
        self.score.add_measure(TreeMeasure(time=(1, 4)))

    def test_1(self):
        sf = SimpleFormat(quarter_durations=[1, 0, 1])
        sf.chords[0].add_tie('start')
        sf.chords[1].add_tie('stop')
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)
        self.score.fill_with_rest()
        self.score.preliminary_adjoin_rests()
        self.score.add_beats()
        self.score.quantize()

        chord = self.score.get_measure(2).get_part(1).get_staff(1).get_voice(
            1).chords[0]
        chord.remove_from_score()

        result_path = path + '_test_1'
        # with self.assertWarns(UserWarning):
        #     self.score.write(path=result_path)
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)
Ejemplo n.º 7
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        simple_format = SimpleFormat(quarter_durations=[1, 2, 3])
        simple_format.to_stream_voice().add_to_score(self.score)
        measure_1_chords = self.score.get_measure(1).get_part(1).get_staff(
            1).get_voice(1).chords
        measure_2_chords = self.score.get_measure(2).get_part(1).get_staff(
            1).get_voice(1).chords
        for chord in measure_1_chords + measure_2_chords:
            if chord.next_in_score:
                chord.add_words(chord.next_in_score.quarter_duration)
        xml_path = path + '_test_1.xml'
        self.score.write(xml_path)
Ejemplo n.º 8
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        simple_format = SimpleFormat(quarter_durations=4)
        simple_format.to_stream_voice().add_to_score(self.score)
        self.score.add_measure()
        m2 = self.score.get_measure(2)
        self.score.finish()
        actual = m2.to_string()
        expected = """<measure number="2">
  <part id="p1">
    <attributes>
      <divisions>1</divisions>
    </attributes>
    <note>
      <rest/>
      <duration>4</duration>
      <voice>1</voice>
      <type>whole</type>
    </note>
  </part>
</measure>
"""
        self.assertEqual(expected, actual)
Ejemplo n.º 9
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        simple_format = SimpleFormat(quarter_durations=4)
        simple_format.to_stream_voice().add_to_score(self.score)
        part = self.score.get_measure(1).get_part(1)
        expected = part.id
        actual = part.parent_score_part.id
        self.assertEqual(expected, actual)
Ejemplo n.º 10
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        sf = SimpleFormat(midis=[(60)], quarter_durations=[2.2])
        sf.chords[0].add_tie('start')
        v = sf.to_stream_voice(1)
        # print(v.chords[0].tie_types)
        v.add_to_score(self.score)
        ch = self.score.get_measure(1).get_part(1).chords[0]
        result_path = path + '_test_1'
        self.score.write(path=result_path)
Ejemplo n.º 11
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        sf = SimpleFormat()
        sf.add_chord(TreeChord())
        sf.add_chord(TreeChord(quarter_duration=0))
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)
        chord = self.score.get_measure(1).get_part(1).get_staff(1).get_voice(1).chords[1]
        self.score.fill_with_rest()
        self.score.preliminary_adjoin_rests()
        self.score.add_beats()
        chord.remove_from_score()

        xml_path = path + '_test_1.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)

    def test_2(self):
        sf = SimpleFormat()
        chord_1 = sf.add_chord(TreeChord())
        chord_2 = sf.add_chord(TreeChord(quarter_duration=0))
        chord_1.add_tie('start')
        chord_2.add_tie('stop')

        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)
        chord = self.score.get_measure(1).get_part(1).get_staff(1).get_voice(1).chords[1]
        self.score.fill_with_rest()
        self.score.preliminary_adjoin_rests()
        self.score.add_beats()
        chord.remove_from_score()

        xml_path = path + '_test_2.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)
Ejemplo n.º 12
0
class Test(TestCase):
    def setUp(self):
        self.score = TreeScoreTimewise()
        self.score.add_part()

    def test_1(self):
        self.score.add_measure().time = (3, 4)
        self.score.add_measure().time = (2, 4)
        self.score.add_measure().time = (2, 4)
        self.score.add_measure().time = (2, 4)
        self.score.get_measure(4).time.force_show = True
        self.score.add_measure().time = (3, 8)

        self.score.finish()
        result_path = path + '_test_1'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)
Ejemplo n.º 13
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        sf = SimpleFormat(quarter_durations=[0.5, 1.5, 0.3, 1.7])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)

        result_path = path + '_test_1'
        self.score.fill_with_rest()
        self.score.preliminary_adjoin_rests()
        self.score.add_beats()
        self.score.quantize()
        self.score.split_not_notatable()
        for chord in self.score.get_measure(1).get_part(1).get_staff(
                1).get_voice(1).chords:
            chord.add_lyric(round(float(chord.offset), 2))
        # with self.assertWarns(UserWarning):
        #     self.score.write(path=result_path)
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)
Ejemplo n.º 14
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()
        sf = SimpleFormat(
            quarter_durations=[4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4])
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)

    def test_orientation(self):
        self.score.page_style.orientation = 'landscape'
        result_path = path + '_test_1'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)

    def test_2(self):
        for index, measure in enumerate(
                self.score.get_children_by_type(TreeMeasure)):
            if index % 4 == 0:
                measure.add_system_break()
        self.score.page_style.orientation = 'landscape'
        self.score.page_style.system_distance = 150
        result_path = path + '_test_2'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)

    def test_3(self):
        # self.score.page_style.format = 'landscape'
        self.score.get_measure(5).add_system_break()
        # p = self.score.get_measure(5).get_part(1).get_children_by_type(Print)[0]
        # s = p.add_child(SystemLayout())
        # s.add_child(SystemDistance(300))
        self.score.get_measure(10).add_system_break()
        self.score.get_measure(10).add_system_distance(200)
        self.score.get_measure(12).add_system_distance(200)
        # self.score.page_style.system_distance = 20

        result_path = path + '_test_3'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)
Ejemplo n.º 15
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        simpleformat = SimpleFormat(quarter_durations=4)
        voice = simpleformat.to_stream_voice(2)
        self.score.add_part()
        self.score.add_measure()
        p = self.score.get_measure(1).get_part(1)
        remaining_chords = voice.add_to_part(p)
        result = '''<part id="p1">
  <attributes>
    <divisions>1</divisions>
  </attributes>
  <note>
    <pitch>
      <step>B</step>
      <octave>4</octave>
    </pitch>
    <duration>4</duration>
    <voice>2</voice>
    <type>whole</type>
  </note>
  <backup>
    <duration>4</duration>
  </backup>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>1</voice>
    <type>whole</type>
  </note>
</part>
'''
        self.assertEqual(p.to_string(), result)
        self.assertEqual(remaining_chords, None)

    def test_2(self):
        simpleformat = SimpleFormat(quarter_durations=7)
        voice = simpleformat.to_stream_voice(2)
        self.score.add_part()
        self.score.add_measure()
        p = self.score.get_measure(1).get_part(1)
        remaining_chords = voice.add_to_part(p)
        result = '''<part id="p1">
  <attributes>
    <divisions>1</divisions>
  </attributes>
  <note>
    <pitch>
      <step>B</step>
      <octave>4</octave>
    </pitch>
    <duration>4</duration>
    <tie type="start"/>
    <voice>2</voice>
    <type>whole</type>
    <notations>
      <tied number="1" type="start"/>
    </notations>
  </note>
  <backup>
    <duration>4</duration>
  </backup>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>1</voice>
    <type>whole</type>
  </note>
</part>
'''
        self.assertEqual(p.to_string(), result)
        chord = remaining_chords[0]
        self.assertEqual(chord.quarter_duration, 3)
        self.assertEqual(chord.get_children_by_type(Tie)[0].type, 'stop')

    def test_3(self):
        simpleformat = SimpleFormat(quarter_durations=3)
        voice = simpleformat.to_stream_voice(2)
        self.score.add_part()
        self.score.add_measure()
        p = self.score.get_measure(1).get_part(1)
        remaining_chords = voice.add_to_part(p)
        result = '''<part id="p1">
  <attributes>
    <divisions>1</divisions>
  </attributes>
  <note>
    <pitch>
      <step>B</step>
      <octave>4</octave>
    </pitch>
    <duration>3</duration>
    <voice>2</voice>
    <type>half</type>
    <dot/>
  </note>
  <note>
    <rest/>
    <duration>1</duration>
    <voice>2</voice>
    <type>quarter</type>
  </note>
  <backup>
    <duration>4</duration>
  </backup>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>1</voice>
    <type>whole</type>
  </note>
</part>
'''
        self.assertEqual(p.to_string(), result)

    def test_4(self):
        simpleformat = SimpleFormat(quarter_durations=7, midis=0)
        voice = simpleformat.to_stream_voice(2)
        self.score.add_part()
        self.score.add_measure()
        p = self.score.get_measure(1).get_part(1)
        remaining_chords = voice.add_to_part(p)
        result = '''<part id="p1">
  <attributes>
    <divisions>1</divisions>
  </attributes>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>2</voice>
    <type>whole</type>
  </note>
  <backup>
    <duration>4</duration>
  </backup>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>1</voice>
    <type>whole</type>
  </note>
</part>
'''
        self.assertEqual(p.to_string(), result)
        self.assertEqual(remaining_chords[0].midis[0].value, 0)
        self.assertEqual(remaining_chords[0].get_children_by_type(Tie), [])

    def test_5(self):
        simpleformat = SimpleFormat(quarter_durations=3, midis=0)
        voice = simpleformat.to_stream_voice(2)
        self.score.add_part()
        self.score.add_measure()
        p = self.score.get_measure(1).get_part(1)
        voice.add_to_part(p)
        result = '''<part id="p1">
  <attributes>
    <divisions>1</divisions>
  </attributes>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>2</voice>
    <type>whole</type>
  </note>
  <backup>
    <duration>4</duration>
  </backup>
  <note>
    <rest/>
    <duration>4</duration>
    <voice>1</voice>
    <type>whole</type>
  </note>
</part>
'''
        self.assertEqual(p.to_string(), result)
Ejemplo n.º 16
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        measure = self.score.add_measure()
        self.score.add_part()
        chord = TreeChord(quarter_duration=4, midis=[60])
        measure.get_part(1).add_chord(chord)
        measure.get_part(1).staves = 2
        chord.staff_number = 1
        xml_path = path + '_test_1.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_2(self):
        measure = self.score.add_measure()
        self.score.add_part()
        chord = TreeChord(quarter_duration=4, midis=[60])
        measure.get_part(1).add_chord(chord)
        chord.staff_number = 2
        measure.get_part(1).staves = 2
        xml_path = path + '_test_2.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_3(self):
        sf = SimpleFormat(quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1])
        for index, chord in enumerate(sf.chords):
            if index in [1, 6]:
                chord.staff_number = 2
        sf.to_stream_voice(1).add_to_score(self.score, part_number=1)
        all_parts = [part for m in self.score.get_children_by_type(TreeMeasure) for part in
                     m.get_children_by_type(TreePart)]
        for part in all_parts:
            part.staves = 2

        xml_path = path + '_test_3.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_4(self):
        sf = SimpleFormat(4)
        sf.to_stream_voice(1).add_to_score(self.score, part_number=1)
        score_part = self.score.get_score_parts()[0]
        score_part.number_of_staves = 2
        xml_path = path + '_test_4.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_5(self):
        sf = SimpleFormat(4)
        sf.to_stream_voice(1).add_to_score(self.score, part_number=1)
        score_part = self.score.get_score_parts()[0]
        score_part.number_of_staves = 2
        clef = BASS_CLEF.__deepcopy__()
        clef.number = 2
        self.score.get_measure(1).get_part(1).add_clef(clef)
        xml_path = path + '_test_5.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_6(self):
        r_sf = SimpleFormat(quarter_durations=[4])
        l_sf = SimpleFormat(quarter_durations=[4], midis=[60])
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)
        xml_path = path + '_test_6.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_7(self):
        r_sf = SimpleFormat(
            quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1])
        l_sf = SimpleFormat(quarter_durations=[4, 5], midis=[72, 75])
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)
        xml_path = path + '_test_7.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_8(self):
        r_sf = SimpleFormat(
            quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1])
        l_sf = SimpleFormat(quarter_durations=[4, 5], midis=[50, 55])
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)
        clef = BASS_CLEF.__deepcopy__()
        clef.number = 2
        self.score.get_measure(1).get_part(1).add_clef(clef)
        xml_path = path + '_test_8.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_9(self):
        r_sf = SimpleFormat(
            quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1],
            midis=[60, 61, 62, 63])
        l_sf = SimpleFormat(quarter_durations=[4, 5], midis=[50, 55])
        r_sf.chords[1].manual_staff_number = 2
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)
        clef = BASS_CLEF.__deepcopy__()
        clef.number = 2
        self.score.get_measure(1).get_part(1).add_clef(clef)
        xml_path = path + '_test_9.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_10(self):
        # chord clef
        r_sf = SimpleFormat(
            quarter_durations=[4, 4],
            midis=[60, 61])
        l_sf = SimpleFormat(quarter_durations=[4, 4], midis=[50, 55])
        l_sf.chords[0].add_clef(BASS_CLEF)
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)
        xml_path = path + '_test_10.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_11(self):
        r_sf = SimpleFormat(
            quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1],
            midis=[60, 61, 54, 63])
        l_sf = SimpleFormat(quarter_durations=[4, 5], midis=[72, 53])
        r_sf.chords[1].manual_staff_number = 2
        r_sf.auto_clef()
        l_sf.auto_clef()
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)

        xml_path = path + '_test_11.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_12(self):
        r_sf_2 = SimpleFormat(
            quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1],
            midis=[60, 61, 54, 63])
        r_sf_1 = SimpleFormat(
            quarter_durations=[0.25, 2.25, 0.5, 1, 2, Fraction(1, 3), Fraction(4, 3), Fraction(1, 3), 1],
            midis=[70, 71, 64, 73])
        l_sf_1 = SimpleFormat(quarter_durations=[4, 5], midis=[50, 35])
        l_sf_2 = SimpleFormat(quarter_durations=[5, 4], midis=[44, 60])
        r_sf_2.auto_clef()
        r_sf_1.auto_clef()
        l_sf_1.auto_clef()
        l_sf_2.auto_clef()
        r_sf_1.to_stream_voice(2).add_to_score(self.score, part_number=1, staff_number=1)
        r_sf_2.to_stream_voice(1).add_to_score(self.score, part_number=1, staff_number=1)
        l_sf_1.to_stream_voice(2).add_to_score(self.score, part_number=1, staff_number=2)
        l_sf_2.to_stream_voice(1).add_to_score(self.score, part_number=1, staff_number=2)

        xml_path = path + '_test_12.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_13(self):
        # accidental
        r_sf = SimpleFormat(quarter_durations=[4, 4, 4, 4], midis=[61, 63, 64, 67])
        l_sf = SimpleFormat(quarter_durations=[4, 4, 4, 4], midis=[60, 64, 63, 64])
        r_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=1)
        l_sf.to_stream_voice().add_to_score(self.score, part_number=1, staff_number=2)

        xml_path = path + '_test_13.xml'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)
Ejemplo n.º 17
0
class Test(TestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()
        self.score.page_style.format = 'portrait'

    def test_1(self):
        sf = SimpleFormat(quarter_durations=(1.5, 0.5, 1.5))
        v = sf.to_stream_voice(1)
        self.score.set_time_signatures(times={1: (7, 8)})
        v.add_to_score(self.score)
        xml_path = path + '_test_1.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)

    def test_2(self):
        sf = SimpleFormat(quarter_durations=(0.25, 0.25))
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)
        xml_path = path + '_test_2.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)

    def test_3(self):
        sf = SimpleFormat(quarter_durations=(0.25, 0.125, 0.125, 0.25, 0.25))
        v = sf.to_stream_voice(1)
        v.add_to_score(self.score)
        xml_path = path + '_test_3.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        # TestScore().assert_template(xml_path)

    def test_iter_permutations(self):
        input_list = [1, 2, 3]
        actual = list(permutations(input_list))
        expected = [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]
        self.assertEqual(expected, actual)

    def test_iter_permutations_duplicates(self):
        input_list = [1, 1, 2]
        actual = list(dict.fromkeys(list(permutations(input_list))))
        expected = [(1, 1, 2), (1, 2, 1), (2, 1, 1)]
        self.assertEqual(expected, actual)

    def test_32_groups(self):
        actual = _generate_test_note_groups(32)
        expected = {1: [[1, 1, 1, 1, 1, 1, 1, 1]],
                    2: [[2, 1, 1, 1, 1, 1, 1],
                        [1, 2, 1, 1, 1, 1, 1],
                        [1, 1, 2, 1, 1, 1, 1],
                        [1, 1, 1, 2, 1, 1, 1],
                        [1, 1, 1, 1, 2, 1, 1],
                        [1, 1, 1, 1, 1, 2, 1],
                        [1, 1, 1, 1, 1, 1, 2]],
                    3: [[2, 2, 1, 1, 1, 1],
                        [2, 1, 2, 1, 1, 1],
                        [2, 1, 1, 2, 1, 1],
                        [2, 1, 1, 1, 2, 1],
                        [2, 1, 1, 1, 1, 2],
                        [1, 2, 2, 1, 1, 1],
                        [1, 2, 1, 2, 1, 1],
                        [1, 2, 1, 1, 2, 1],
                        [1, 2, 1, 1, 1, 2],
                        [1, 1, 2, 2, 1, 1],
                        [1, 1, 2, 1, 2, 1],
                        [1, 1, 2, 1, 1, 2],
                        [1, 1, 1, 2, 2, 1],
                        [1, 1, 1, 2, 1, 2],
                        [1, 1, 1, 1, 2, 2]],
                    4: [[2, 2, 3, 1],
                        [2, 2, 1, 3],
                        [2, 3, 2, 1],
                        [2, 3, 1, 2],
                        [2, 1, 2, 3],
                        [2, 1, 3, 2],
                        [3, 2, 2, 1],
                        [3, 2, 1, 2],
                        [3, 1, 2, 2],
                        [1, 2, 2, 3],
                        [1, 2, 3, 2],
                        [1, 3, 2, 2]],
                    5: [[2, 3, 1, 1, 1],
                        [2, 1, 3, 1, 1],
                        [2, 1, 1, 3, 1],
                        [2, 1, 1, 1, 3],
                        [3, 2, 1, 1, 1],
                        [3, 1, 2, 1, 1],
                        [3, 1, 1, 2, 1],
                        [3, 1, 1, 1, 2],
                        [1, 2, 3, 1, 1],
                        [1, 2, 1, 3, 1],
                        [1, 2, 1, 1, 3],
                        [1, 3, 2, 1, 1],
                        [1, 3, 1, 2, 1],
                        [1, 3, 1, 1, 2],
                        [1, 1, 2, 3, 1],
                        [1, 1, 2, 1, 3],
                        [1, 1, 3, 2, 1],
                        [1, 1, 3, 1, 2],
                        [1, 1, 1, 2, 3],
                        [1, 1, 1, 3, 2]],
                    6: [[2, 4, 1, 1],
                        [2, 1, 4, 1],
                        [2, 1, 1, 4],
                        [4, 2, 1, 1],
                        [4, 1, 2, 1],
                        [4, 1, 1, 2],
                        [1, 2, 4, 1],
                        [1, 2, 1, 4],
                        [1, 4, 2, 1],
                        [1, 4, 1, 2],
                        [1, 1, 2, 4],
                        [1, 1, 4, 2]],
                    7: [[2, 5, 1], [2, 1, 5], [5, 2, 1], [5, 1, 2], [1, 2, 5], [1, 5, 2]],
                    8: [[3, 1, 1, 1, 1, 1],
                        [1, 3, 1, 1, 1, 1],
                        [1, 1, 3, 1, 1, 1],
                        [1, 1, 1, 3, 1, 1],
                        [1, 1, 1, 1, 3, 1],
                        [1, 1, 1, 1, 1, 3]],
                    9: [[3, 3, 1, 1],
                        [3, 1, 3, 1],
                        [3, 1, 1, 3],
                        [1, 3, 3, 1],
                        [1, 3, 1, 3],
                        [1, 1, 3, 3]],
                    10: [[3, 4, 1], [3, 1, 4], [4, 3, 1], [4, 1, 3], [1, 3, 4], [1, 4, 3]],
                    11: [[4, 1, 1, 1, 1],
                         [1, 4, 1, 1, 1],
                         [1, 1, 4, 1, 1],
                         [1, 1, 1, 4, 1],
                         [1, 1, 1, 1, 4]],
                    12: [[5, 1, 1, 1], [1, 5, 1, 1], [1, 1, 5, 1], [1, 1, 1, 5]],
                    13: [[6, 1, 1], [1, 6, 1], [1, 1, 6]],
                    14: [[7, 1], [1, 7]],
                    15: [[3, 3, 2], [3, 2, 3], [2, 3, 3]]
                    }
        self.assertEqual(expected, actual)

    def test_get_32_groups(self):
        keys = [1, 2]
        actual = get_32_groups(keys)
        expected = [[1, 1, 1, 1, 1, 1, 1, 1],
                    [2, 1, 1, 1, 1, 1, 1],
                    [1, 2, 1, 1, 1, 1, 1],
                    [1, 1, 2, 1, 1, 1, 1],
                    [1, 1, 1, 2, 1, 1, 1],
                    [1, 1, 1, 1, 2, 1, 1],
                    [1, 1, 1, 1, 1, 2, 1],
                    [1, 1, 1, 1, 1, 1, 2]]
        self.assertEqual(expected, actual)

    def test_convert_groups(self):
        keys = [1, 2]
        actual = convert_note_groups_to_quarter_durations(get_32_groups(keys), 32)
        expected = [[0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
                    [0.25, 0.125, 0.125, 0.125, 0.125, 0.125, 0.125],
                    [0.125, 0.25, 0.125, 0.125, 0.125, 0.125, 0.125],
                    [0.125, 0.125, 0.25, 0.125, 0.125, 0.125, 0.125],
                    [0.125, 0.125, 0.125, 0.25, 0.125, 0.125, 0.125],
                    [0.125, 0.125, 0.125, 0.125, 0.25, 0.125, 0.125],
                    [0.125, 0.125, 0.125, 0.125, 0.125, 0.25, 0.125],
                    [0.125, 0.125, 0.125, 0.125, 0.125, 0.125, 0.25]]
        self.assertEqual(expected, actual)

    def test_set_break_beam(self):
        sf = SimpleFormat(quarter_durations=[4])
        sf.to_stream_voice().add_to_score(self.score)
        self.score.break_beam_32 = True
        actual = self.score.break_beam_32
        self.assertTrue(actual)
        part = self.score.get_measure(1).get_part(1)
        actual = part.break_beam_32
        self.assertTrue(actual)
        actual = self.score.get_measure(1).get_part(1).tree_part_staves[1].tree_part_voices[1].break_beam_32
        self.assertTrue(actual)

    def test_32_first_group(self):
        self.score.set_time_signatures(times={1: (1, 4)})
        self.score.break_beam_32 = True
        keys = [1]
        all_durations = flatten(convert_note_groups_to_quarter_durations(get_32_groups(keys), 32))
        sf = SimpleFormat(quarter_durations=all_durations)

        sf.to_stream_voice().add_to_score(self.score)
        xml_path = path + '_32_first_group.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)

    def test_all_possible_32ths(self):
        self.score.break_beam_32 = True
        self.score.set_time_signatures(times={1: (1, 4)})
        keys = list(range(1, 16))
        all_durations = flatten(convert_note_groups_to_quarter_durations(get_32_groups(keys), 32))
        sf = SimpleFormat(quarter_durations=all_durations)

        sf.to_stream_voice().add_to_score(self.score)
        xml_path = path + '_all_possible_32s.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)

    def test_beam_break_with_quantization(self):
        quarter_durations = [Fraction(2, 1), Fraction(1, 1), Fraction(3, 2), Fraction(5, 2), Fraction(1, 1),
                             Fraction(2, 1), Fraction(3, 1), Fraction(1, 1), Fraction(3, 2), Fraction(1, 2),
                             Fraction(4, 15), Fraction(2, 5), Fraction(1, 3), Fraction(8, 15), Fraction(8, 45),
                             Fraction(2, 9), Fraction(4, 15), Fraction(16, 75), Fraction(8, 25), Fraction(4, 15),
                             Fraction(3, 5), Fraction(1, 2), Fraction(2, 5), Fraction(1, 2), Fraction(1, 3),
                             Fraction(2, 5), Fraction(4, 15), Fraction(16, 75), Fraction(4, 15), Fraction(8, 25),
                             Fraction(8, 15), Fraction(2, 3)]

        self.score.break_beam_32 = True
        self.score.forbidden_divisions = [5, 6, 7]
        sf = SimpleFormat(quarter_durations=quarter_durations)
        sf.to_stream_voice().add_to_score(self.score)
        xml_path = path + '_beam_break_with_quantization.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)

    def test_all_possible_16ths(self):
        self.score.set_time_signatures(times={1: (1, 4)})
        keys = list(range(1, 5))
        all_durations = flatten(convert_note_groups_to_quarter_durations(get_16_groups(keys), 16))
        sf = SimpleFormat(quarter_durations=all_durations)

        sf.to_stream_voice().add_to_score(self.score)
        xml_path = path + '_all_possible_16ths.xml'
        self.score.finish()
        self.score.to_partwise()
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)
Ejemplo n.º 18
0
class Test(XMLTestCase):
    def setUp(self) -> None:
        self.score = TreeScoreTimewise()

    def test_1(self):
        self.score.add_measure()
        self.score.add_part()
        self.score.get_measure(1).get_part(1).add_chord(
            TreeChord(quarter_duration=4, midis=60))
        xml_path = path + '_test_1.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)

    def test_2(self):
        self.score.add_measure()
        self.score.add_part()
        self.score.get_measure(1).get_part(1).add_chord(TreeChord(
            quarter_duration=4, midis=60),
                                                        voice_number=2)
        xml_path = path + '_test_2.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)

    def test_3(self):
        self.score.add_measure()
        self.score.add_part()
        self.score.get_measure(1).get_part(1).add_chord(TreeChord(
            quarter_duration=4, midis=70),
                                                        voice_number=2)
        self.score.get_measure(1).get_part(1).add_chord(TreeChord(
            quarter_duration=4, midis=60),
                                                        voice_number=4)
        xml_path = path + '_test_3.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)

    def test_4(self):
        self.score.add_measure()
        self.score.add_part()
        self.score.get_measure(1).get_part(1).add_chord(TreeChord(
            quarter_duration=4, midis=70),
                                                        staff_number=2)
        xml_path = path + '_test_4.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)

    def test_5(self):
        self.score.add_measure()
        self.score.add_part()
        self.score.get_measure(1).get_part(1).add_chord(TreeChord(
            quarter_duration=4, midis=60),
                                                        staff_number=1)
        self.score.get_measure(1).get_part(1).add_chord(TreeChord(
            quarter_duration=4, midis=70),
                                                        staff_number=2)
        xml_path = path + '_test_5.xml'
        self.score.write(path=xml_path)
        self.assertCompareFiles(xml_path)
Ejemplo n.º 19
0
class Test(XMLTestCase):
    def setUp(self):
        self.score = TreeScoreTimewise()
        self.score.add_measure()
        self.score.add_part()

    def test_1(self):
        midis = [61, 61, 62, 60, 63, 64, 65, 61]
        for midi in midis:
            self.score.add_chord(1, 1, TreeChord(midi, quarter_duration=0.5))

        self.score.get_measure(1).get_part(1)
        self.score.finish()

        result_path = path + '_test_1'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)

    def test_2(self):
        midis = [
            60.0, 60.5, 61.0, 62.5, 64.0, 66.0, 68.0, 69.5, 71.0, 71.5, 72.0,
            71.5, 71.0, 69.5, 68.0, 66.0, 64.0, 62.5, 61.0, 60.5
        ]
        measure_number = 1
        for midi in midis:
            chord = TreeChord(midi, quarter_duration=0.5)
            chord.add_lyric(midi)
            self.score.add_chord(measure_number, 1, chord)
            remaining_duration = self.score.get_measure(
                measure_number).get_part(1).get_staff(1).get_voice(
                    1).remaining_duration
            if remaining_duration == 0:
                self.score.add_measure()
                measure_number += 1
        self.score.accidental_mode = 'modern'
        result_path = path + '_test_2'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)

    def test_3(self):
        midis = [(61.0, 63), 61.0, 0, 62.0, 61, 61, 61, (62, 61)]
        measure_number = 1
        for midi in midis:
            chord = TreeChord(midi, quarter_duration=0.5)
            chord.add_lyric([m.value for m in chord.midis])
            self.score.add_chord(measure_number, 1, chord)
            remaining_duration = self.score.get_measure(
                measure_number).get_part(1).get_staff(1).get_voice(
                    1).remaining_duration
            if remaining_duration == 0:
                self.score.add_measure()
                measure_number += 1
        self.score.accidental_mode = 'modern'
        result_path = path + '_test_3'
        self.score.write(path=result_path)
        TestScore().assert_template(result_path=result_path)

    def test_4(self):
        simpleformat = SimpleFormat(midis=list(range(60, 68)))
        voice = simpleformat.to_stream_voice(2)
        voice.add_to_score(self.score)
        xml_path = path + '_test_4.xml'
        self.score.accidental_mode = 'modern'
        self.score.write(xml_path)
        self.assertCompareFiles(xml_path)

    def test_5(self):
        simpleformat = SimpleFormat(midis=[71.5, 71.5, 72, 72, 71.5, 71.5],
                                    quarter_durations=6 * [0.5])
        voice = simpleformat.to_stream_voice(1)
        voice.add_to_score(self.score)
        result_path = path + '_test_5'
        self.score.accidental_mode = 'normal'
        self.score.write(result_path)
        TestScore().assert_template(result_path=result_path)

    def test_6(self):
        midis = [51.5, 51.5, 50.5, 48.5, 49.5, 48.5, 50.0, 50.0, 49.5, 49.0]
        durations = [
            Fraction(255, 56),
            Fraction(6525, 3136),
            Fraction(6075, 3136),
            Fraction(2475, 3136),
            Fraction(2145, 3136),
            Fraction(2805, 3136),
            Fraction(1815, 3136),
            Fraction(65, 56),
            Fraction(2015, 1568),
            Fraction(1625, 1568)
        ]
        simpleformat = SimpleFormat(midis=midis, quarter_durations=durations)
        simpleformat.auto_clef()
        voice = simpleformat.to_stream_voice(1)
        voice.add_to_score(self.score)
        result_path = path + '_test_6'
        self.score.max_division = 7
        self.score.accidental_mode = 'modern'
        self.score.write(result_path)
        TestScore().assert_template(result_path=result_path)

    def test_7(self):
        # todo update_accidental does not work ...
        class TestFlag3(TreeChordFlag3):
            def __init__(self, *args, **kwargs):
                super().__init__(*args, **kwargs)

            def implement(self, chord):
                split = chord.split(2, 2)
                split[0].to_rest()
                for ch in split:
                    ch.update_type()
                    ch.update_dot()
                return split

        xml_path = path + '_test_7.xml'
        sf = SimpleFormat(midis=[61], quarter_durations=[4])
        sf.to_stream_voice().add_to_score(self.score, part_number=1)
        chord = sf.chords[0]
        chord.add_flag(TestFlag3())
        sf.to_stream_voice().add_to_score(self.score, part_number=2)
        self.score.write(xml_path)

    def test_8(self):
        midis = [60 + factor * 0.5 for factor in range(0, 25)]
        simple_format = SimpleFormat(midis=midis + midis[-1::-1][1:])
        for index, chord in enumerate(simple_format.chords):
            if index <= len(midis) - 1:
                chord.midis[0].accidental.mode = 'sharp'
            else:
                chord.midis[0].accidental.mode = 'flat'
        simple_format.to_stream_voice().add_to_score(self.score)
        xml_path = path + '_test_8.xml'
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)

    def test_9(self):
        midis = [60, 61, 62, 63, 64, 61, 62, 61]
        simple_format = SimpleFormat(midis=midis)
        simple_format.to_stream_voice().add_to_score(self.score, part_number=1)
        for chord in simple_format.chords:
            chord.midis[0].accidental.force_show = True
        simple_format.to_stream_voice().add_to_score(self.score, part_number=2)
        for chord in simple_format.chords:
            chord.midis[0].accidental.force_hide = True
        simple_format.to_stream_voice().add_to_score(self.score, part_number=3)
        xml_path = path + '_test_9.xml'
        self.score.write(xml_path)
        TestScore().assert_template(xml_path)