def _make_score( self, rhythm_maker, division_list, score_number_markup, ): lists = rhythm_maker(division_list) music = sequencetools.flatten_sequence(lists) measures = scoretools.make_spacer_skip_measures(division_list) time_signature_context = scoretools.Context( measures, context_name='TimeSignatureContext', name='TimeSignatureContext', ) measures = scoretools.make_spacer_skip_measures(division_list) staff = scoretools.Staff(measures) set_(staff).instrument_name = score_number_markup staff.context_name = 'RhythmicStaff' staff.name = 'Note-entry staff' measures = mutate(staff).replace_measure_contents(music) score = scoretools.Score() score.append(time_signature_context) score.append(staff) self._add_final_bar_line(score) self._check_score(score) return score
def _make_score( self, rhythm_maker, division_list, score_number_markup, ): lists = rhythm_maker(division_list) selections = sequencetools.flatten_sequence(lists) measures = scoretools.make_spacer_skip_measures(division_list) time_signature_context = scoretools.Context( measures, context_name='TimeSignatureContext', name='TimeSignatureContext', ) measures = scoretools.make_spacer_skip_measures(division_list) staff = scoretools.Staff(measures) set_(staff).instrument_name = score_number_markup staff.context_name = 'RhythmicStaff' staff.name = 'Note-entry staff' measures = mutate(staff).replace_measure_contents(selections) score = scoretools.Score() score.append(time_signature_context) score.append(staff) self._add_final_bar_line(score) self._check_score(score) return score
def make_lilypond_file(music, divisions, implicit_scaling=False): r'''Makes LilyPond file. .. container:: :: >>> maker = rhythmmakertools.EvenRunRhythmMaker(1) >>> divisions = [(3, 4), (4, 8), (1, 4)] >>> music = maker(divisions) >>> lilypond_file = rhythmmakertools.make_lilypond_file( ... music, ... divisions, ... ) >>> show(lilypond_file) # doctest: +SKIP Used in rhythm-maker docs. Returns LilyPond file. ''' assert isinstance(music, list), repr(music) prototype = (selectiontools.Selection, scoretools.Tuplet) assert all(isinstance(x, prototype) for x in music), repr(music) assert isinstance(divisions, (tuple, list)), repr(divisions) score = scoretools.Score() lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file(score) context = scoretools.Context(context_name='TimeSignatureContext') measures = scoretools.make_spacer_skip_measures( divisions, implicit_scaling=implicit_scaling, ) context.extend(measures) score.append(context) measures = scoretools.make_spacer_skip_measures( divisions, implicit_scaling=implicit_scaling, ) staff = scoretools.Staff(measures) staff.context_name = 'RhythmicStaff' music = sequencetools.flatten_sequence(music) measures = mutate(staff).replace_measure_contents(music) score.append(staff) return lilypond_file
def _rewrite_meter_( selections, meters, reference_meters=None, rewrite_tuplets=False, use_messiaen_style_ties=False, ): from abjad.tools import metertools from abjad.tools import scoretools from abjad.tools.topleveltools import mutate meters = [metertools.Meter(_) for _ in meters] durations = [durationtools.Duration(_) for _ in meters] reference_meters = reference_meters or () selections = DurationSpellingSpecifier._split_at_measure_boundaries( selections, meters, use_messiaen_style_ties=use_messiaen_style_ties, ) measures = scoretools.make_spacer_skip_measures(durations) staff = scoretools.Staff(measures) mutate(staff).replace_measure_contents(selections) for measure, meter in zip(staff, meters): for reference_meter in reference_meters: if str(reference_meter) == str(meter): meter = reference_meter break mutate(measure[:]).rewrite_meter( meter, rewrite_tuplets=rewrite_tuplets, use_messiaen_style_ties=use_messiaen_style_ties, ) selections = [] for measure in staff: selections.append(measure[:]) return selections
def _add_time_signature_context(self, score): time_signatures = self.time_signatures if not time_signatures: return time_signature_context = scoretools.Context(context_name="TimeSignatureContext", name="Time Signature Context") measures = scoretools.make_spacer_skip_measures(time_signatures) time_signature_context.extend(measures) score.insert(0, time_signature_context)
def _gallery_input_block_to_score(self, block): from abjad.tools import sequencetools maker = type(self)(**block.input_) lists = maker(block.divisions) music = sequencetools.flatten_sequence(lists) measures = scoretools.make_spacer_skip_measures(block.divisions) time_signature_context = scoretools.Context( measures, context_name='TimeSignatureContext', name='TimeSignatureContext', ) measures = scoretools.make_spacer_skip_measures(block.divisions) staff = scoretools.RhythmicStaff(measures) measures = mutate(staff).replace_measure_contents(music) score = scoretools.Score() score.append(time_signature_context) score.append(staff) return score
def _add_time_signature_context(self, score): time_signatures = self.time_signatures if not time_signatures: return time_signature_context = scoretools.Context( context_name='TimeSignatureContext', name='Time Signature Context', ) measures = scoretools.make_spacer_skip_measures(time_signatures) time_signature_context.extend(measures) score.insert(0, time_signature_context)
def make_lilypond_file(music, divisions): r'''Makes LilyPond file. .. container:: :: >>> maker = rhythmmakertools.EvenRunRhythmMaker(1) >>> divisions = [(3, 4), (4, 8), (1, 4)] >>> music = maker(divisions) >>> lilypond_file = rhythmmakertools.make_lilypond_file( ... music, ... divisions, ... ) >>> show(lilypond_file) # doctest: +SKIP Used in rhythm-maker docs. Returns LilyPond file. ''' score = scoretools.Score() lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file(score) context = scoretools.Context(context_name='TimeSignatureContext') measures = scoretools.make_spacer_skip_measures(divisions) context.extend(measures) score.append(context) measures = scoretools.make_spacer_skip_measures(divisions) staff = scoretools.RhythmicStaff(measures) music = sequencetools.flatten_sequence(music) measures = mutate(staff).replace_measure_contents(music) score.append(staff) return lilypond_file
def __illustrate__(self, format_specification=''): r'''Formats time signature inventory. :: >>> show(inventory) # doctest: +SKIP Returns LilyPond file. ''' from abjad.tools import lilypondfiletools from abjad.tools import scoretools measures = scoretools.make_spacer_skip_measures(self) staff = scoretools.RhythmicStaff(measures) score = scoretools.Score([staff]) lilypond_file = lilypondfiletools.make_basic_lilypond_file(score) return lilypond_file
def __illustrate__(self, format_specification=''): r'''Formats time signature inventory. :: >>> show(inventory) # doctest: +SKIP Returns LilyPond file. ''' from abjad.tools import lilypondfiletools from abjad.tools import scoretools measures = scoretools.make_spacer_skip_measures(self) staff = scoretools.Staff(measures) staff.context_name = 'RhythmicStaff' score = scoretools.Score([staff]) lilypond_file = lilypondfiletools.make_basic_lilypond_file(score) return lilypond_file
def from_selections(cls, selections, time_signatures=None): r'''Makes a selection of measures from `selections`. Returns selections. ''' from abjad.tools import scoretools assert len(selections) if not time_signatures: time_signatures = [_.get_duration() for _ in selections] assert len(selections) == len(time_signatures) assert [_.get_duration() for _ in selections] == \ [durationtools.Duration(_) for _ in time_signatures] measures = scoretools.make_spacer_skip_measures(time_signatures) temporary_voice = scoretools.Voice(measures) mutate(temporary_voice).replace_measure_contents(selections) temporary_voice[:] = [] return measures
def make_lilypond_file( selections, divisions, implicit_scaling=None, pitched_staff=None, time_signatures=None, ): r'''Makes LilyPond file. .. container:: **Example 1.** :: >>> maker = rhythmmakertools.EvenRunRhythmMaker(exponent=1) >>> divisions = [(3, 4), (4, 8), (1, 4)] >>> selections = maker(divisions) >>> lilypond_file = rhythmmakertools.make_lilypond_file( ... selections, ... divisions, ... ) >>> show(lilypond_file) # doctest: +SKIP Used in rhythm-maker docs. Returns LilyPond file. ''' assert isinstance(selections, list), repr(selections) prototype = selectiontools.Selection assert all(isinstance(_, prototype) for _ in selections), repr(selections) assert isinstance(divisions, (tuple, list)), repr(divisions) time_signatures = time_signatures or divisions score = scoretools.Score() lilypond_file = \ lilypondfiletools.make_floating_time_signature_lilypond_file(score) context = scoretools.Context(context_name='TimeSignatureContext') measures = scoretools.make_spacer_skip_measures( time_signatures, implicit_scaling=implicit_scaling, ) context.extend(measures) score.append(context) measures = scoretools.make_spacer_skip_measures( time_signatures, implicit_scaling=implicit_scaling, ) if pitched_staff: staff = scoretools.Staff(measures) else: staff = scoretools.Staff(measures, context_name='RhythmicStaff') selections = sequencetools.flatten_sequence(selections) selections_ = copy.deepcopy(selections) try: measures = mutate(staff).replace_measure_contents(selections) except StopIteration: if pitched_staff: staff = scoretools.Staff(selections_) else: staff = scoretools.Staff(selections_, context_name='RhythmicStaff') score.append(staff) return lilypond_file