class TestTreeTimewise(TestCase): def setUp(self): self.score = TreeScoreTimewise() self.score.add_measure() self.score.add_part() def test_score(self): result_path = path + '_test_score' self.score.write(result_path) TestScore().assert_template(result_path=result_path) def test_add_note(self): self.score.add_chord(1, 1, TreeChord(0, 1)) self.score.add_chord(1, 1, TreeChord(0, quarter_duration=1)) self.score.add_chord(1, 1, TreeChord(61, quarter_duration=2)) self.score.finish() result_path = path + '_test_add_note' self.score.write(path=result_path) TestScore().assert_template(result_path=result_path) def test_add_chord(self): self.score.add_chord(1, 1, TreeChord((60, 61), quarter_duration=4)) self.score.finish() # print(self.score.to_string()) # self.score.write(path=path) def test_4(self): self.score.tuplet_line_width = 2.4 sf = SimpleFormat(quarter_durations=[0.2, 0.8]) sf.to_stream_voice().add_to_score(self.score) xml_path = path + '_test_4.xml' self.score.write(xml_path) TestScore().assert_template(result_path=xml_path)
def test_split_quantize(self): s = TreeScoreTimewise() m = TreeMeasure(time=(3, 4)) s.add_measure(m) s.add_part() # m.add_child(p) chord1 = s.add_chord(1, 1, TreeChord((71, 72), quarter_duration=1.3)) l1 = Lyric() l1.add_child(Text('bla')) chord1.add_child(l1) s.add_chord(1, 1, TreeChord((60, 63, 65), quarter_duration=0.6)) s.add_chord(1, 1, TreeChord(60, quarter_duration=1.1)) s.finish() # print(s.to_string()) s.write(path=path) result = '''<part id="one">
class Test(TestCase): def setUp(self) -> None: self.score = TreeScoreTimewise() def test_1(self): self.score.add_measure() self.score.add_part() self.score.add_chord(1, 1, TreeChord()) self.score.add_chord(1, 1, TreeChord(quarter_duration=0)) 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=[0.75, 0.25, 1, 0.5, 4]) sf.chords[1].set_manual_type('16th') sf.chords[1].quarter_duration = 0 sf.chords[0].set_manual_type('eighth') sf.chords[0].set_manual_dots(1) sf.chords[0].quarter_duration = 0 sf.chords[2].set_manual_type('quarter') sf.chords[2].quarter_duration = 0 sf.chords[3].set_manual_type('eighth') sf.chords[3].quarter_duration = 0 sf.to_stream_voice().add_to_score(self.score) xml_path = path + 'test_2.xml' self.score.write(xml_path) TestScore().assert_template(result_path=xml_path) def test_3(self): sf = SimpleFormat(quarter_durations=[4]) sf.chords[0].add_grace_chords( [TreeChord(60), TreeChord(63), TreeChord(68)]) sf.chords[0].add_grace_chords( [TreeChord(61), TreeChord(66)], mode='post') sf.to_stream_voice().add_to_score(self.score) xml_path = path + 'test_3.xml' self.score.write(xml_path) TestScore().assert_template(result_path=xml_path)
class TestGrouping(TestCase): def setUp(self): self.score = TreeScoreTimewise() self.score.add_part() def test_grouping(self): self.make_measure(1, (3, 4)) self.make_measure(2, (6, 8)) # for measure in self.score.get_children_by_type(TreeMeasure): # measure.get_part(1).group_beams() self.score.finish() self.score.write(path=path) def make_measure(self, number, time_signature=(4, 4)): self.score.add_measure(TreeMeasure(time=time_signature)) for i in range(time_signature[0] * 8 // time_signature[1]): self.score.add_chord(number, 1, TreeChord(60, quarter_duration=0.5))
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)