def _get_stage_measure_index(self, current_stage): index = 0 for stage in self._time_signatures[0:current_stage]: stage = flatten_list(stage) for measure in stage: index += 1 return index
def make_conductor_part(): """Renders a conductor part as PDF""" flat = flatten_list(time_signatures) measures = make_spacer_skip_measures(flat) for i, tempo in tempo_map: abjad.attach(tempo, measures[i]) stage_indices = [] total = 0 for n in measures_per_stage: stage_indices.append(total) total += n for letter_number, i in enumerate(stage_indices): rehearsal_mark = abjad.indicatortools.RehearsalMark( number=letter_number + 1) abjad.attach(rehearsal_mark, measures[i][0]) staff = abjad.Staff(measures, context_name='RhythmicStaff') score = abjad.Score([staff]) scheme = abjad.schemetools.Scheme('format-mark-box-alphabet') abjad.setting(score).markFormatter = scheme stylesheet_path = os.path.join( '..', 'stylesheets', 'stylesheet_conductor.ily', ) lilypond_file = abjad.LilyPondFile.new(score, default_paper_size=('letter', 'portrait'), global_staff_size=16, includes=[stylesheet_path], use_relative_includes=True) return lilypond_file
def make_conductor_part(): """Renders a conductor part as PDF""" flat = flatten_list(time_signatures) measures = make_spacer_skip_measures(flat) for i, tempo in tempo_map: abjad.attach(tempo, measures[i]) stage_indices = [] total = 0 for n in measures_per_stage: stage_indices.append(total) total += n for letter_number, i in enumerate(stage_indices): rehearsal_mark = abjad.indicatortools.RehearsalMark( number=letter_number + 1 ) abjad.attach(rehearsal_mark, measures[i][0]) staff = abjad.Staff(measures, context_name='RhythmicStaff') score = abjad.Score([staff]) scheme = abjad.schemetools.Scheme('format-mark-box-alphabet') abjad.setting(score).markFormatter = scheme stylesheet_path = os.path.join( '..', 'stylesheets', 'stylesheet_conductor.ily', ) lilypond_file = abjad.LilyPondFile.new( score, default_paper_size=('letter', 'portrait'), global_staff_size=16, includes=[stylesheet_path], use_relative_includes=True ) return lilypond_file
def _make_skips(self, current_stage): time_signatures = flatten_list(self._time_signatures[current_stage]) voice = abjad.Voice() skip_maker = abjad.LeafMaker(skips_instead_of_rests=True) for time_signature in time_signatures: skips = skip_maker(None, [time_signature]) voice.extend(skips) return voice
def measure_count(self): r"""Gets measure count. Returns nonnegative integer. """ time_signatures = flatten_list( self.time_signatures[0:number_of_stages] ) return len(time_signatures)
def _make_skips(self, current_stage): time_signatures = flatten_list( self._time_signatures[current_stage] ) voice = abjad.Voice() skip_maker = abjad.LeafMaker(skips_instead_of_rests=True) for time_signature in time_signatures: skips = skip_maker(None, [time_signature]) voice.extend(skips) return voice
def test_with_Duration(self): X = [ abjad.Duration(1, 4), [abjad.Duration(1, 4), abjad.Duration(1, 4)] ] new_X = flatten_list(X) test = [ abjad.Duration(1, 4), abjad.Duration(1, 4), abjad.Duration(1, 4) ] self.assertEqual(new_X, test)
def _make_rhythm(self, current_stage): if self._divisions: rhythm = self._rhythm_makers[current_stage]( self._divisions[current_stage]) else: time_signatures = self._time_signatures[current_stage] time_signatures = flatten_list(time_signatures) rhythm = self._rhythm_makers[current_stage](time_signatures) self._hide_full_measure_rests(rhythm) voice = abjad.Voice() voice.extend(rhythm) return voice
def _make_skip_filled_measures(self): r""" Creates measures with measure-length skips for time signature context. Returns list of measures. """ time_signatures = [] for stage in self.time_signatures[0:self.number_of_stages]: flattened_list = flatten_list(stage) time_signatures.extend(flattened_list) measures = make_spacer_skip_measures(time_signatures) return measures
def _make_rhythm(self, current_stage): if self._divisions: rhythm = self._rhythm_makers[current_stage]( self._divisions[current_stage] ) else: time_signatures = self._time_signatures[current_stage] time_signatures = flatten_list(time_signatures) rhythm = self._rhythm_makers[current_stage](time_signatures) self._hide_full_measure_rests(rhythm) voice = abjad.Voice() voice.extend(rhythm) return voice
def bifurcate_duration( duration, maximum_denominator=8, allowable_leafs=( abjad.Duration(3, 8), abjad.Duration(5, 16), abjad.Duration(2, 4), abjad.Duration(7, 16), abjad.Duration(5, 8), abjad.Duration(3, 4)), minimum_duration=abjad.Duration(3, 8), even='disallowed', bigger='left' ): assert(isinstance(duration, abjad.Duration)) assert(duration.has_power_of_two_denominator) """ Force `duration` denominator to `maximum denominator` and convert to a `NonreducedFraction`.""" if duration.denominator < maximum_denominator: multiplier = int(maximum_denominator / duration.denominator) duration = abjad.mathtools.NonreducedFraction( duration.numerator * multiplier, duration.denominator * multiplier ) else: duration = abjad.mathtools.NonreducedFraction(duration) """ Subdivide if long enough and convert back to `abjad.Duration` from `NonreducedFraction`.""" if (duration < minimum_duration or duration.reduce() in allowable_leafs): return abjad.Duration(duration) else: numerators = partition_integer_into_halves( duration.numerator, even=even, bigger=bigger) pair = [ abjad.Duration(numerators[0], duration.denominator), abjad.Duration(numerators[1], duration.denominator) ] new_pair = [] for duration in pair: divisions = bifurcate_duration( duration, maximum_denominator=maximum_denominator, allowable_leafs=allowable_leafs, minimum_duration=minimum_duration ) new_pair.append(divisions) flat = flatten_list(new_pair) return flat
def bifurcate_duration(duration, maximum_denominator=8, allowable_leafs=(abjad.Duration(3, 8), abjad.Duration(5, 16), abjad.Duration(2, 4), abjad.Duration(7, 16), abjad.Duration(5, 8), abjad.Duration(3, 4)), minimum_duration=abjad.Duration(3, 8), even='disallowed', bigger='left'): assert (isinstance(duration, abjad.Duration)) assert (duration.has_power_of_two_denominator) """ Force `duration` denominator to `maximum denominator` and convert to a `NonreducedFraction`.""" if duration.denominator < maximum_denominator: multiplier = int(maximum_denominator / duration.denominator) duration = abjad.mathtools.NonreducedFraction( duration.numerator * multiplier, duration.denominator * multiplier) else: duration = abjad.mathtools.NonreducedFraction(duration) """ Subdivide if long enough and convert back to `abjad.Duration` from `NonreducedFraction`.""" if (duration < minimum_duration or duration.reduce() in allowable_leafs): return abjad.Duration(duration) else: numerators = partition_integer_into_halves(duration.numerator, even=even, bigger=bigger) pair = [ abjad.Duration(numerators[0], duration.denominator), abjad.Duration(numerators[1], duration.denominator) ] new_pair = [] for duration in pair: divisions = bifurcate_duration( duration, maximum_denominator=maximum_denominator, allowable_leafs=allowable_leafs, minimum_duration=minimum_duration) new_pair.append(divisions) flat = flatten_list(new_pair) return flat
def _make_repeated_note_measures(self): r""" Creates measures with repeated notes from time signatures for the time signature context. Returns list of measures. """ time_signatures = [] for stage in self.time_signatures[0:self.number_of_stages]: flattened_list = flatten_list(stage) time_signatures.extend(flattened_list) measures = [] for time_signature in time_signatures: durations = [abjad.Duration(1, time_signature.denominator)] * \ time_signature.numerator note_maker = abjad.NoteMaker() notes = note_maker([0], durations) measure = abjad.scoretools.Measure(time_signature, notes) if time_signature.denominator > 4: beam = abjad.spannertools.Beam() abjad.attach(beam, measure) measures.append(measure) return measures
# -*- coding: utf-8 -*- from surge.materials.segment_ii.bass.durations import denominators, durations from surge.tools.utilities.flatten_list import flatten_list from abjad import rhythmmakertools taleas = [ rhythmmakertools.Talea(counts=flatten_list(durations[0]), denominator=denominators[0]), rhythmmakertools.Talea(counts=flatten_list(durations[1]), denominator=denominators[1]), None, None, None, None, None, ]
def test__already_flat(self): X = [1, 2] new_X = flatten_list(X) test = [1, 2] self.assertEqual(new_X, test)
def test__deeper(self): X = [1, [2, [3, [4]], 5], 6] new_X = flatten_list(X) test = [1, 2, 3, 4, 5, 6] self.assertEqual(new_X, test)
def test__with_tuple(self): X = [1, (2, 3)] new_X = flatten_list(X) test = [1, 2, 3] self.assertEqual(new_X, test)
def test__simple_nested_reverse(self): X = [[1, 2], 3] new_X = flatten_list(X) test = [1, 2, 3] self.assertEqual(new_X, test)
time_signatures = [] for division in divisions: stage = [] for subdivision in division: stage_division = [] for duration in subdivision: if duration.denominator < 8: multiplier = int(8 / duration.denominator) duration = mathtools.NonreducedFraction( duration.numerator * multiplier, duration.denominator * multiplier ) time_signature = abjad.TimeSignature(duration) stage_division.append(time_signature) stage.append(stage_division) time_signatures.append(stage) subsection_indices = [ [0, 3, 5, 9, 12,16, 20, 22, 25,27,30, 32], [0, 4, 7, 11, 13, 16, 18, 22, 25, 27, 31, 35], [0, 3, 5, 9, 13, 16, 20, 22, 26, 29, 32, 34, 38, 41, 45], [0, 3, 5, 9, 13, 16, 20, 22, 25, 27], [0, 3, 5, 9, 12, 14, 17, 20, 22, 26, 30], ] measure_indices = [ list(range(len(flatten_list(stage)))) for stage in time_signatures ] offsets = make_offsets(time_signatures)
# -*- coding: utf-8 -*- from surge.materials.segment_ii.violin.durations import denominators, durations from surge.tools.utilities.flatten_list import flatten_list from abjad import rhythmmakertools taleas = [ rhythmmakertools.Talea( counts=flatten_list(durations[0]), denominator=denominators[0] ), rhythmmakertools.Talea( counts=flatten_list(durations[1]), denominator=denominators[1] ), None, None, None, None, None, ]
def test_simple_mixed_types(self): X = [1, ['a', {'z': 2}]] new_X = flatten_list(X) test = [1, 'a', {'z': 2}] self.assertEqual(new_X, test)
def test__trivial(self): X = [1] new_X = flatten_list(X) test = [1] self.assertEqual(new_X, test)
def test_return_type(self): X = [] new_X = flatten_list(X) self.assertIsInstance(new_X, list)
def test__simple_nested(self): X = [1, [2, 3]] new_X = flatten_list(X) test = [1, 2, 3] self.assertEqual(new_X, test)
# -*- coding: utf-8 -*- from surge.materials.segment_ii.cello.durations import denominators, durations from surge.tools.utilities.flatten_list import flatten_list from abjad import rhythmmakertools taleas = [ rhythmmakertools.Talea( counts=flatten_list(durations[0]), denominator=denominators[0] ), rhythmmakertools.Talea( counts=flatten_list(durations[1]), denominator=denominators[1] ), None, None, None, None, None, ]