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)
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')
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)