Beispiel #1
0
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
Beispiel #2
0
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)
Beispiel #3
0
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
                        )
                    }
                }
            >>
        }
        """
    )