def make_desordre_lilypond_file(score): """ Makes Désordre LilyPond file. """ lilypond_file = abjad.LilyPondFile.new(music=score, default_paper_size=("a4", "letter"), global_staff_size=14) lilypond_file.layout_block.indent = 0 lilypond_file.layout_block.ragged_right = True lilypond_file.layout_block.merge_differently_dotted = True lilypond_file.layout_block.merge_differently_headed = True context_block = abjad.ContextBlock(source_lilypond_type="Score") lilypond_file.layout_block.items.append(context_block) context_block.remove_commands.append("Bar_number_engraver") context_block.remove_commands.append("Default_bar_line_engraver") context_block.remove_commands.append("Timing_translator") abjad.override(context_block).beam.breakable = True abjad.override(context_block).glissando.breakable = True abjad.override(context_block).note_column.ignore_collision = True abjad.override(context_block).spacing_spanner.uniform_stretching = True abjad.override(context_block).text_script.staff_padding = 4 abjad.override(context_block).text_spanner.breakable = True abjad.override(context_block).tuplet_bracket.bracket_visibility = True abjad.override(context_block).tuplet_bracket.minimum_length = 3 abjad.override(context_block).tuplet_bracket.padding = 2 scheme = abjad.Scheme("ly:spanner::set-spacing-rods") abjad.override(context_block).tuplet_bracket.springs_and_rods = scheme scheme = abjad.Scheme("tuplet-number::calc-fraction-text") abjad.override(context_block).tuplet_number.text = scheme abjad.setting(context_block).autoBeaming = False moment = abjad.SchemeMoment((1, 12)) abjad.setting(context_block).proportionalNotationDuration = moment abjad.setting(context_block).tupletFullLength = True context_block = abjad.ContextBlock(source_lilypond_type="Staff") lilypond_file.layout_block.items.append(context_block) # LilyPond CAUTION: Timing_translator must appear # before Default_bar_line_engraver! context_block.consists_commands.append("Timing_translator") context_block.consists_commands.append("Default_bar_line_engraver") scheme = abjad.Scheme("'numbered") abjad.override(context_block).time_signature.style = scheme context_block = abjad.ContextBlock(source_lilypond_type="RhythmicStaff") lilypond_file.layout_block.items.append(context_block) # LilyPond CAUTION: Timing_translator must appear # before Default_bar_line_engraver! context_block.consists_commands.append("Timing_translator") context_block.consists_commands.append("Default_bar_line_engraver") scheme = abjad.Scheme("'numbered") abjad.override(context_block).time_signature.style = scheme pair = (-2, 4) abjad.override(context_block).vertical_axis_group.minimum_Y_extent = pair context_block = abjad.ContextBlock(source_lilypond_type="Voice") lilypond_file.layout_block.items.append(context_block) context_block.remove_commands.append("Forbid_line_break_engraver") return lilypond_file
def render_score(score, beats, jigs): # adapted from https://github.com/Abjad/abjad/blob/5c7f5f7abd8013f99b60c9ceb3a91c771abbca7c/abjad/demos/ligeti/make_desordre_lilypond_file.py file = abjad.LilyPondFile.new(score, global_staff_size=18) context_block = abjad.ContextBlock(source_context_name='Score') file.layout_block.items.append(context_block) # for future reference: http://lilypond.org/doc/v2.18/Documentation/learning/engravers-explained.en.html context_block.remove_commands.append('Bar_number_engraver') context_block.remove_commands.append('Default_bar_line_engraver') abjad.override(context_block).clef.transparent = True abjad.override(context_block).spacing_spanner.strict_grace_spacing = True abjad.override(context_block).spacing_spanner.strict_note_spacing = True abjad.override(context_block).spacing_spanner.uniform_stretching = True abjad.override(context_block).text_script.staff_padding = 0 abjad.override(context_block).time_signature.transparent = True abjad.override(context_block).rest.transparent = True abjad.override(context_block).dots.transparent = True file.header_block.tagline = ' ' file.paper_block.paper_width = beats * 15 file.paper_block.paper_height = jigs * 20 file.paper_block.bottom_margin = 0 file.paper_block.left_margin = 0 vector = abjad.SpacingVector(0, 0, 15, 0) #file.paper_block.system_system_spacing = vector abjad.show(file)
def configure_lilypond_file(lilypond_file): """ Configures LilyPond file. """ lilypond_file._global_staff_size = 8 context_block = abjad.ContextBlock( source_lilypond_type=r'Staff \RemoveEmptyStaves', ) abjad.override(context_block).vertical_axis_group.remove_first = True lilypond_file.layout_block.items.append(context_block) lilypond_file.paper_block.system_separator_markup = 'slashSeparator' bottom_margin = abjad.LilyPondDimension(0.5, 'in') lilypond_file.paper_block.bottom_margin = bottom_margin top_margin = abjad.LilyPondDimension(0.5, 'in') lilypond_file.paper_block.top_margin = top_margin left_margin = abjad.LilyPondDimension(0.75, 'in') lilypond_file.paper_block.left_margin = left_margin right_margin = abjad.LilyPondDimension(0.5, 'in') lilypond_file.paper_block.right_margin = right_margin paper_width = abjad.LilyPondDimension(5.25, 'in') lilypond_file.paper_block.paper_width = paper_width paper_height = abjad.LilyPondDimension(7.25, 'in') lilypond_file.paper_block.paper_height = paper_height lilypond_file.header_block.composer = abjad.Markup('Arvo Pärt') title = 'Cantus in Memory of Benjamin Britten (1980)' lilypond_file.header_block.title = abjad.Markup(title)
def test_custom_score_template_class_02(): """ Score template with custom (voice and staff) contexts. CAUTION: always use built-in LilyPond score context; do not rename. """ class CustomContextScoreTemplate(abjad.ScoreTemplate): ### INITIALIZER ### def __init__(self): pass ### SPECIAL METHODS ### def __call__(self): custom_voice = abjad.Voice(lilypond_type="CustomVoice") custom_staff = abjad.Staff(lilypond_type="CustomStaff") score = abjad.Score() custom_staff.append(custom_voice) score.append(custom_staff) return score custom_context_score_template = CustomContextScoreTemplate() score = custom_context_score_template() assert format(score) == abjad.String.normalize( r""" \new Score << \new CustomStaff { \new CustomVoice { } } >> """ ) # here's how to properly override with externalized layout score = custom_context_score_template() score[0][0].extend("c'4 ( d'4 e'4 f'4 )") lilypond_file = abjad.LilyPondFile.new(score) context_block = abjad.ContextBlock( source_lilypond_type="Voice", type_="Engraver_group", name="CustomVoice", alias="Voice", ) lilypond_file.layout_block.items.append(context_block) abjad.override(context_block).note_head.color = "green" abjad.override(context_block).stem.color = "green" context_block = abjad.ContextBlock( source_lilypond_type="Staff", type_="Engraver_group", name="CustomStaff", alias="Staff", ) lilypond_file.layout_block.items.append(context_block) context_block.accepts_commands.append("CustomVoice") abjad.override(context_block).staff_symbol.color = "red" context_block = abjad.ContextBlock(source_lilypond_type="Score") lilypond_file.layout_block.items.append(context_block) context_block.accepts_commands.append("CustomStaff") assert format(lilypond_file.layout_block) == abjad.String.normalize( r""" \layout { \context { \Voice \name CustomVoice \type Engraver_group \alias Voice \override NoteHead.color = #green \override Stem.color = #green } \context { \Staff \name CustomStaff \type Engraver_group \alias Staff \accepts CustomVoice \override StaffSymbol.color = #red } \context { \Score \accepts CustomStaff } } """ ) assert format(lilypond_file.score_block) == abjad.String.normalize( r""" \score { \new Score << \new CustomStaff { \new CustomVoice { c'4 ( d'4 e'4 f'4 ) } } >> } """ )