def test_1(self): fm = FractalMusic(tempo=60, proportions=[1, 2, 3, 4], tree_permutation_order=[3, 1, 4, 2], quarter_duration=100) fm.midi_generator.midi_range = [60, 79] fm.add_layer() partial_fm = fm.get_leaves()[3] partial_fm.add_layer() for leaf in partial_fm.traverse(): leaf.chord.add_lyric(leaf.fractal_order) leaf.chord.add_words(leaf.midi_generator.midi_range) # leaf.chord.add_words(leaf.midi_generator.directions, relative_y=30) # print([leaf.fractal_order for leaf in partial_fm.traverse_leaves()]) score = TreeScoreTimewise() v = partial_fm.get_simple_format(0).to_stream_voice(1) v.add_to_score(score, 1) v = partial_fm.get_simple_format().__deepcopy__().to_stream_voice(1) v.add_to_score(score, 2) partial_fm.reduce_children( condition=lambda child: child.fractal_order > 2) v = partial_fm.get_simple_format().__deepcopy__().to_stream_voice(1) v.add_to_score(score, 3) xml_path = path + '_test_1.xml' score.write(xml_path) self.assertCompareFiles(actual_file_path=xml_path)
def test_3(self): fm = FractalMusic(duration=100) fm.add_layer() try: fm.tempo = 60 except (ChildTempoIsAlreadySet, TempoIsAlreadySet) as err: self.fail(err + "was raised!")
def test_7(self): fm = FractalMusic(tempo=60, proportions=[1, 2, 3, 4], tree_permutation_order=[3, 1, 4, 2], quarter_duration=20) fm.midi_generator.midi_range = [60, 79] fm.add_layer() fm.chord.add_words(fm.midi_generator.midi_range) for child in fm.get_children(): child.chord.add_lyric(child.fractal_order) child.chord.add_words(child.midi_generator.midi_range) for index, node in enumerate(fm.get_children()): node.midi_generator.midi_range = [60 - index, 72 - index] fm.add_layer() for leaf in fm.traverse_leaves(): leaf.chord.add_lyric(leaf.fractal_order) score = TreeScoreTimewise() for layer_number in range(0, fm.number_of_layers + 1): simple_format = fm.get_simple_format(layer_number) v = simple_format.to_stream_voice(1) v.add_to_score(score, layer_number + 1) xml_path = path + '_test_7.xml' score.accidental_mode = 'normal' score.write(xml_path) self.assertCompareFiles(actual_file_path=xml_path)
def setUp(self) -> None: self.fm = FractalMusic(tempo=60, quarter_duration=12, tree_permutation_order=(3, 1, 4, 2), proportions=[1, 2, 3, 4], multi=(1, 1)) self.fm.midi_generator.midi_range = [55, 55 + 24] self.fm.midi_generator.microtone = 4
def setUp(self) -> None: self.fm_3 = FractalMusic(value=10) self.fm_3.tempo = 60 self.fm_7 = FractalMusic(value=30, proportions=(1, 2, 3, 4, 5, 6, 7), tree_permutation_order=(3, 1, 6, 5, 7, 4, 2)) self.fm_7.tempo = 72
def setUp(self) -> None: self.score = TreeScoreTimewise() fm = FractalMusic(tempo=60, quarter_duration=10, reading_direction='vertical') fm.add_layer() fm.add_layer() self.fm = fm.get_children()[1] self.deep_copied = self.fm.__deepcopy__()
def test_8(self): fm = FractalMusic(duration=100) fm.tempo = 72 fm.add_layer() fm.add_layer() fm.add_layer() fm.set_none_tempi(60) self.assertEqual(fm.get_layer(2, key='tempo'), [[72, 72, 72], [72, 72, 72], [72, 72, 72]])
def setUp(self) -> None: self.fm = FractalMusic(proportions=(1, 2, 3), tree_permutation_order=(3, 1, 2)) self.fm.duration = 10 self.fm.tempo = 60 self.fm.midi_generator.midi_range = [60, 67] self.fm.add_layer() self.score = TreeScoreTimewise() self.score.set_time_signatures( quarter_durations=[self.fm.quarter_duration])
def test_1(self): fm = FractalMusic(proportions=[1, 2, 3], tree_permutation_order=[3, 1, 2], duration=12, tempo=72) fm.quarter_duration = round(fm.quarter_duration) fm.add_layer() quarter_durations = [float(leaf.quarter_duration) for leaf in fm.traverse_leaves()] # print(quarter_durations) # print(sum(quarter_durations)) fm.quantize_leaves(grid_size=0.5) quarter_durations = [float(leaf.quarter_duration) for leaf in fm.traverse_leaves()] self.assertEqual(quarter_durations, [7.0, 2.5, 4.5])
def test_4(self): fm = FractalMusic(duration=100) fm.add_layer() fm.get_children()[0].tempo = 72 fm.set_none_tempi(90) self.assertEqual([child.tempo for child in fm.get_children()], [72, 90., 90])
def test_deep_copied_child_midi_values(self): fm = FractalMusic(proportions=[1, 2, 3, 4], tree_permutation_order=[3, 1, 4, 2], quarter_duration=20, tempo=70) fm.midi_generator.midi_range = [36, 60] fm.add_layer() selected_node = fm.get_children()[0] copied_node = selected_node.__deepcopy__() copied_node.add_layer() actual = [node.midi_value for node in copied_node.get_children()] selected_node.add_layer() expected = [node.midi_value for node in selected_node.get_children()] self.assertEqual(expected, actual)
def test_4(self): fm_1 = FractalMusic(multi=(1, 2), tempo=60, quarter_duration=10) fm_2 = FractalMusic(multi=(1, 1), tempo=60, quarter_duration=10) fms = [fm_1, fm_2] for fm in fms: fm.midi_generator.midi_range = [60, 72] fm_2.multi = fm_1.multi self.assertEqual(fm_2.children_fractal_values, fm_1.children_fractal_values) self.assertEqual(fm_2.children_fractal_orders, fm_1.children_fractal_orders) self.assertEqual(fm_2.midi_generator.midi_range, fm_1.midi_generator.midi_range) self.assertEqual(fm_2.children_generated_midis, fm_1.children_generated_midis)
def setUp(self) -> None: self.fm = FractalMusic(tempo=60, quarter_duration=12, tree_permutation_order=(3, 1, 2), proportions=[1, 2, 3]) self.fm.midi_generator.set_directions(1, 1, -1) self.fm.midi_generator.midi_range = [55, 72]
def test_calculate_range_factor(self): fm = FractalMusic(proportions=(1, 2, 3, 4, 5, 6, 7), tree_permutation_order=(2, 6, 4, 1, 3, 7, 5), quarter_duration=30, tempo=60) fm.midi_generator.midi_range = [60, 84] multi_chord_midi_range_interval = 11 fm.add_layer() actual = [ leaf.calculate_range_factor(multi_chord_midi_range_interval) for leaf in fm.traverse_leaves() ] expected = [ -3.6666666666666665, -1.2222222222222223, -1.8333333333333333, 11.0, 2.2, 1.1, 1.375 ] self.assertEqual(expected, actual)
def test_change_midi_range_afterwards(self): fm = FractalMusic(proportions=[1, 2, 3], tree_permutation_order=[3, 1, 2]) fm.tempo = 60 fm.duration = 10 fm.midi_generator.midi_range = [40, 50] fm.add_layer() fm.add_layer() fm.reset_midis() fm.midi_generator.midi_range = [60, 70] expected = [62.0, 65.0, 60.0, 67.0, 69.0, 70.0, 67.0, 65.0, 69.0] actual = [l.midi_value for l in fm.traverse_leaves()] self.assertEqual(expected, actual)
class Test(TestCase): def setUp(self) -> None: self.fm = FractalMusic(tempo=60, tree_permutation_order=[3, 1, 2], proportions=[1, 2, 3], quarter_duration=20) self.score = TreeScoreTimewise() def test_1(self): self.fm.add_layer() self.fm.add_layer() self.fm.add_layer() sf = self.fm.get_simple_format(layer=1) v = sf.to_stream_voice(1) v.add_to_score(self.score) xml_path = path + '_test_1.xml' self.score.write(xml_path) self.assertCompareFiles(xml_path)
def test_1(self): fm = FractalMusic(tempo=60, quarter_duration=10) fm.midi_generator.midi_range = [60, 72] fm.add_layer() fm.add_info('fractal_order') score = fm.get_score(layer_number=fm.number_of_layers) xml_path = path + '_test_1.xml' score.write(path=xml_path) self.assertCompareFiles(xml_path)
def test_1(self): fm = FractalMusic(tempo=60, quarter_duration=10, proportions=(1, 2, 3), tree_permutation_order=(3, 1, 2)) fm.add_layer() midis = [B(4), A(4, 'b'), C(4, '#'), A(3), F(4)] fm.get_children()[0].add_layer() for leaf, midi in zip(fm.traverse_leaves(), midis): leaf.set_chord(TreeChord(midi)) score = fm.get_score(show_fractal_orders=True) xml_path = path + '_test_.xml' score.write(path=xml_path)
def test_3(self): fm = FractalMusic(tempo=60, quarter_duration=10) fm.midi_generator.midi_range = [60, 72] fm.add_layer() fm.add_layer() fm.add_info('midi_value') score = fm.get_score() xml_path = path + '_test_3.xml' score.write(path=xml_path) self.assertCompareFiles(xml_path)
def test_4(self): fm = FractalMusic(tempo=60, quarter_duration=10) fm.midi_generator.midi_range = [60, 72] fm.add_layer() fm.add_layer() fm.add_info((lambda node: int(node.midi_value) if int(node.midi_value) == node.midi_value else node.midi_values, 'above')) score = fm.get_score() xml_path = path + '_test_4.xml' score.write(path=xml_path) self.assertCompareFiles(xml_path)
def test_4(self): # self.fm.multi = (self.fm.multi[0], self.fm.multi[1] + 1) def get_chord_stamp(): node = fm.__copy__() node.midi_generator.midi_range = fm.midi_generator.midi_range node.midi_generator.microtone = 4 node.add_layer() chord_midis = [child.midi_value for child in node.get_children()] output = [chord_midi - chord_midis[node.size // 2] for chord_midi in chord_midis] return output fm = FractalMusic(proportions=(1, 2, 3, 4, 5, 6, 7), tree_permutation_order=(2, 6, 4, 1, 3, 7, 5), quarter_duration=30, tempo=80) fm.midi_generator.midi_range = (60, 72) fm.midi_generator.microtone = 4 fm.add_layer() fm.quantize_children(grid_size=1) proportions = (1, 10, 1, 7, 1) breakpoints = (1, Fraction(1, 7), 1) selected_nodes = fm.get_children()[1:3] breath_quarter_duration = sum([node.quarter_duration for node in selected_nodes]) breathe = Breathe(proportions=proportions, breakpoints=breakpoints, quarter_duration=breath_quarter_duration, quantize=1) parent_chord_field = ChordField(duration_generator=breathe.duration_generator.__deepcopy__()) for i in range(len(selected_nodes)): node = selected_nodes[i] start_chord = [stamp + node.midi_value for stamp in get_chord_stamp()] next_node = node.next_sibling if next_node: end_chord = [stamp + node.midi_value for stamp in get_chord_stamp()] else: end_chord = start_chord chord_field = ChordField( midi_generator=ValueGenerator(RandomInterpolation(start=start_chord, end=end_chord, seed=10)), long_ending_mode='self_extend', short_ending_mode='self_shrink') parent_chord_field.add_child(chord_field) node.chord_field = chord_field score = fm.get_score(show_fractal_orders=True, layer_number=fm.number_of_layers) score.max_division = 7 score.finish() partwise = score.to_partwise() xml_path = path + '_test_4.xml' partwise.write(xml_path) self.assertCompareFiles(xml_path)
class Test(TestCase): def setUp(self) -> None: self.fm = FractalMusic(duration=10) def test_1(self): self.fm.tempo = 70 self.fm.add_layer() self.fm.change_quarter_duration(round(self.fm.quarter_duration)) xml_path = path + '_test_1.xml' score = self.fm.get_score(show_fractal_orders=True) score.write(xml_path) self.assertCompareFiles(xml_path) def test_2(self): self.fm.tempo = 70 self.fm.add_layer() self.fm.add_layer() self.fm.quantize_children() xml_path = path + '_test_2.xml' score = self.fm.get_children_score(show_fractal_orders=True) score.write(xml_path) self.assertCompareFiles(xml_path)
def test_3(self): fm = FractalMusic(tempo=60, quarter_duration=10, multi=(1, 3)) fm.midi_generator.midi_range = [60, 72] fm.add_layer() for child in fm.get_children(): for midi in child.chord.midis: midi.notehead = Notehead('diamond', filled='no') for child in fm.get_children(): child.add_gliss() fm.get_children()[-1].chord_field.chords[-1].get_post_grace_chords( )[0].midis[0].notehead = Notehead('diamond', filled='no') score = fm.get_score(show_fractal_orders=True, layer_number=fm.number_of_layers) xml_path = path + '_test_3.xml' score.write(path=xml_path) self.assertCompareFiles(xml_path)
def test_5(self): def get_chord(node): output = fm.get_multi_chord_midis_with_range_factor(range_factor=1, microtone=4) transposition = node.midi_value - output[3] output = [midi + transposition for midi in output] return output fm = FractalMusic(proportions=(1, 2, 3, 4, 5, 6, 7), tree_permutation_order=(2, 6, 4, 1, 3, 7, 5), quarter_duration=30, tempo=72) # fm.multi = (self.fm.multi[0], self.fm.multi[1] + 1) fm.midi_generator.midi_range = (62, 62 + 11) fm.midi_generator.microtone = 4 fm.add_layer() fm.quantize_children(grid_size=1) selected_nodes = fm.get_children()[2:5] proportions = (1, 10, 1, 7, 1) breakpoints = (1, Fraction(1, 7), 1) breath_quarter_duration = sum([node.quarter_duration for node in selected_nodes]) breathe = Breathe(proportions=proportions, breakpoints=breakpoints, quarter_duration=breath_quarter_duration, quantize=1) parent_chord_field = ChordField(duration_generator=breathe.duration_generator.__deepcopy__()) for i in range(len(selected_nodes)): node = selected_nodes[i] start_chord = get_chord(node) next_node = node.next_sibling if next_node: end_chord = get_chord(next_node) else: end_chord = start_chord chord_field = ChordField( midi_generator=ValueGenerator(RandomInterpolation(start=start_chord, end=end_chord, seed=10)), long_ending_mode='self_extend', short_ending_mode='self_shrink') parent_chord_field.add_child(chord_field) node.chord_field = chord_field score = fm.get_score(show_fractal_orders=True, layer_number=fm.number_of_layers) score.max_division = 7 score.finish() partwise = score.to_partwise() xml_path = path + '_test_5.xml' partwise.write(xml_path) self.assertCompareFiles(xml_path)
def test_2(self): fm = FractalMusic(tempo=60, quarter_duration=10, multi=(1, 2)) fm.midi_generator.midi_range = [60, 72] fm.add_layer() for child in fm.get_children(): child.chord.add_articulation('accent') child.chord.add_dynamics('f') for child in fm.get_children(): child.add_gliss() score = fm.get_score(show_fractal_orders=True, layer_number=fm.number_of_layers) xml_path = path + '_test_2.xml' score.write(path=xml_path) self.assertCompareFiles(xml_path)
def test_6(self): fm = FractalMusic(reading_direction='vertical', tempo=120, value=1.5, proportions=(1, 2, 3, 4, 5, 6, 7), tree_permutation_order=(2, 6, 4, 1, 3, 7, 5), multi=(1, 4)) fm.midi_generator.midi_range = (62, 70) fm.add_layer() # fm.generate_children(number_of_children=1) fm.reduce_children(lambda child: child.fractal_order < 7) result = fm.get_children()[0].midi_generator.midi_range # not [62, 70] because of directions ([-1, ...]) expected = [70, 62] self.assertEqual(expected, result)
def test_1(self): fm = FractalMusic(tempo=60, quarter_duration=10) fm.midi_generator.midi_range = [60, 72] fm.add_layer() for child in fm.get_children(): child.add_gliss(grid=0.5, show_heads=True) child.chord_field.chords[0].add_articulation('accent') score = fm.get_score(show_fractal_orders=True, layer_number=fm.number_of_layers) xml_path = path + '_test_1.xml' score.write(path=xml_path) self.assertCompareFiles(xml_path)
class Test(TestCase): def setUp(self) -> None: self.score = TreeScoreTimewise() self.fm = FractalMusic(tempo=60, quarter_duration=10) self.fm.midi_generator.midi_range = [60, 71] self.fm.add_layer() self.copied = self.fm.__deepcopy__() def test_1(self): xml_path = path + '_test_1.xml' self.fm.quantize_children(1) self.score.set_time_signatures([child.quarter_duration for child in self.fm.get_children()]) self.copied.inverse_tree_directions() self.copied.quantize_children(1) self.fm.get_simple_format().to_stream_voice().add_to_score(score=self.score, staff_number=1) self.copied.get_simple_format().to_stream_voice().add_to_score(score=self.score, staff_number=2) self.score.write(xml_path) self.assertCompareFiles(xml_path)
class Test(TestCase): def setUp(self) -> None: self.fm = FractalMusic(tempo=60, quarter_duration=4) def test_1(self): self.fm.split(1, 2) score = TreeScoreTimewise() self.fm.get_score(score) xml_path = path + '_test_1.xml' score.write(xml_path) self.assertCompareFiles(xml_path) def test_2(self): self.fm.split(1, 2)[1].chord.to_rest() score = TreeScoreTimewise() self.fm.get_score(score) xml_path = path + '_test_2.xml' score.write(xml_path) self.assertCompareFiles(xml_path)
def test_5(self): # node.chord_fields are part of a breathe group fm = FractalMusic(quarter_duration=20, tempo=80) fm.add_layer() fm.quantize_children(grid_size=1) node_groups = slice_list(fm.get_children(), (2, 1)) cf_1 = ChordField( midi_generator=ValueGenerator(cycle([60, 61, 64, 66])), long_ending_mode='self_extend', short_ending_mode='self_shrink' ) cf_2 = ChordField( midi_generator=ValueGenerator(cycle([72, 73, 74, 73, 72])), long_ending_mode='self_extend', short_ending_mode='self_shrink' ) breathe_unit = Fraction(1, 5) breathe_breakpoints = (5 * breathe_unit, breathe_unit, 5 * breathe_unit) breathe_proportions = [2, 4, 1, 7, 2] breathe = Breathe(proportions=breathe_proportions, quarter_duration=sum([node.chord.quarter_duration for node in node_groups[0]]), breakpoints=breathe_breakpoints) cfg = ChordField(duration_generator=breathe.duration_generator) cfg.add_child(cf_1) cfg.add_child(cf_2) fm.get_children()[0].chord_field = cf_1 fm.get_children()[1].chord_field = cf_2 score = fm.get_score(show_fractal_orders=True) xml_path = path + 'test_5.xml' score.write(xml_path) self.assertCompareFiles(xml_path)