def prep_instruments(instrument_dicts):
    insts = deepcopy(instrument_dicts)
    for inst in insts:
        abj.attach(abj.Clef(inst['clef']), inst['voice'])
        inst['voice'].remove_commands.append('Note_heads_engraver')
        inst['voice'].consists_commands.append('Completion_heads_engraver')
        inst['voice'].remove_commands.append('Rest_engraver')
        inst['voice'].consists_commands.append('Completion_rest_engraver')
        set_(inst['voice']).beam_exceptions = scht.SchemeVector()
        set_(inst['voice']).base_moment = scht.SchemeMoment(1, 4)
        set_(inst['voice']).beat_structure = scht.SchemeVector(1, 1)
        set_(inst['voice']).completion_unit = scht.SchemeMoment(1, 4)
    return insts
Exemple #2
0
    def __illustrate__(self, **kwargs):
        r'''Illustrates segment.

        Returns LilyPond file.
        '''
        from abjad.tools import durationtools
        from abjad.tools import indicatortools
        from abjad.tools import lilypondfiletools
        from abjad.tools import markuptools
        from abjad.tools import scoretools
        from abjad.tools import schemetools
        from abjad.tools.topleveltools import attach
        from abjad.tools.topleveltools import override
        from abjad.tools.topleveltools import select
        from abjad.tools.topleveltools import set_
        notes = []
        for item in self:
            note = scoretools.Note(item, durationtools.Duration(1, 8))
            notes.append(note)
        voice = scoretools.Voice(notes)
        staff = scoretools.Staff([voice])
        score = scoretools.Score([staff])
        score.add_final_bar_line()
        override(score).bar_line.transparent = True
        override(score).bar_number.stencil = False
        override(score).beam.stencil = False
        override(score).flag.stencil = False
        override(score).stem.stencil = False
        override(score).time_signature.stencil = False
        string = 'override Score.BarLine.transparent = ##f'
        command = indicatortools.LilyPondCommand(string, format_slot='after')
        last_leaf = select().by_leaf()(score)[-1][-1]
        attach(command, last_leaf)
        moment = schemetools.SchemeMoment((1, 12))
        set_(score).proportional_notation_duration = moment
        lilypond_file = lilypondfiletools.make_basic_lilypond_file(
            global_staff_size=12,
            music=score,
        )
        if 'title' in kwargs:
            title = kwargs.get('title')
            if not isinstance(title, markuptools.Markup):
                title = markuptools.Markup(title)
            lilypond_file.header_block.title = title
        if 'subtitle' in kwargs:
            markup = markuptools.Markup(kwargs.get('subtitle'))
            lilypond_file.header_block.subtitle = markup
        command = indicatortools.LilyPondCommand('accidentalStyle forget')
        lilypond_file.layout_block.items.append(command)
        lilypond_file.layout_block.indent = 0
        string = 'markup-system-spacing.padding = 8'
        command = indicatortools.LilyPondCommand(string, prefix='')
        lilypond_file.paper_block.items.append(command)
        string = 'system-system-spacing.padding = 10'
        command = indicatortools.LilyPondCommand(string, prefix='')
        lilypond_file.paper_block.items.append(command)
        string = 'top-markup-spacing.padding = 4'
        command = indicatortools.LilyPondCommand(string, prefix='')
        lilypond_file.paper_block.items.append(command)
        return lilypond_file
Exemple #3
0
    def make_score(self):
        r'''Make MIDI playback score from scale:

        ::

            >>> scale = tonalanalysistools.Scale('E', 'major')
            >>> score = scale.make_score()

        ..  doctest::

            >>> print(format(score))
            \new Score \with {
                tempoWholesPerMinute = #(ly:make-moment 30 1)
            } <<
                \new Staff {
                    \key e \major
                    e'8
                    fs'8
                    gs'8
                    a'8
                    b'8
                    cs''8
                    ds''8
                    e''8
                    ds''8
                    cs''8
                    b'8
                    a'8
                    gs'8
                    fs'8
                    e'4
                }
            >>

        ::

            >>> show(score) # doctest: +SKIP

        Returns score.
        '''
        ascending_notes = self.make_notes(8, durationtools.Duration(1, 8))
        descending_notes = copy.deepcopy(ascending_notes[:-1])
        descending_notes = list(descending_notes)
        descending_notes.reverse()
        descending_notes = selectiontools.Selection(descending_notes)
        notes = ascending_notes + descending_notes
        notes[-1].written_duration = durationtools.Duration(1, 4)
        staff = scoretools.Staff(notes)
        key_signature = copy.copy(self.key_signature)
        attach(key_signature, staff)
        score = scoretools.Score([staff])
        set_(score).tempo_wholes_per_minute = schemetools.SchemeMoment(30)
        return score
def configure_score(score):
    r'''Configured score.
    '''

    moment = schemetools.SchemeMoment(1, 56)
    set_(score).proportional_notation_duration = moment
    set_(score).tuplet_full_length = True
    override(score).bar_line.stencil = False
    override(score).bar_number.transparent = True
    override(score).spacing_spanner.uniform_stretching = True
    override(score).spacing_spanner.strict_note_spacing = True
    override(score).time_signature.stencil = False
    override(score).tuplet_bracket.padding = 2
    override(score).tuplet_bracket.staff_padding = 4
    scheme = schemetools.Scheme('tuplet-number::calc-fraction-text')
    override(score).tuplet_number.text = scheme
Exemple #5
0
def make_floating_time_signature_lilypond_file(music=None):
    r'''Makes floating time signature LilyPond file.

    ..  container:: example

        ::

            >>> score = Score()
            >>> time_signature_context = scoretools.Context(
            ...     context_name='TimeSignatureContext',
            ...     )
            >>> durations = [(2, 8), (3, 8), (4, 8)]
            >>> measures = scoretools.make_spacer_skip_measures(durations)
            >>> time_signature_context.extend(measures)
            >>> score.append(time_signature_context)
            >>> staff = Staff()
            >>> staff.append(Measure((2, 8), "c'8 ( d'8 )"))
            >>> staff.append(Measure((3, 8), "e'8 ( f'8  g'8 )"))
            >>> staff.append(Measure((4, 8), "fs'4 ( e'8 d'8 )"))
            >>> score.append(staff)
            >>> lilypond_file = \
            ...     lilypondfiletools.make_floating_time_signature_lilypond_file(
            ...     score
            ...     )

        ::

            >>> print(format(lilypond_file)) # doctest: +SKIP
            % 2014-01-07 18:22

            \version "2.19.0"
            \language "english"

            #(set-default-paper-size "letter" 'portrait)
            #(set-global-staff-size 12)

            \header {}

            \layout {
                \accidentalStyle forget
                indent = #0
                ragged-right = ##t
                \context {
                    \name TimeSignatureContext
                    \type Engraver_group
                    \consists Axis_group_engraver
                    \consists Time_signature_engraver
                    \override TimeSignature #'X-extent = #'(0 . 0)
                    \override TimeSignature #'X-offset = #ly:self-alignment-interface::x-aligned-on-self
                    \override TimeSignature #'Y-extent = #'(0 . 0)
                    \override TimeSignature #'break-align-symbol = ##f
                    \override TimeSignature #'break-visibility = #end-of-line-invisible
                    \override TimeSignature #'font-size = #1
                    \override TimeSignature #'self-alignment-X = #center
                    \override VerticalAxisGroup #'default-staff-staff-spacing = #'((basic-distance . 0) (minimum-distance . 12) (padding . 6) (stretchability . 0))
                }
                \context {
                    \Score
                    \remove Bar_number_engraver
                    \accepts TimeSignatureContext
                    \override Beam #'breakable = ##t
                    \override SpacingSpanner #'strict-grace-spacing = ##t
                    \override SpacingSpanner #'strict-note-spacing = ##t
                    \override SpacingSpanner #'uniform-stretching = ##t
                    \override TupletBracket #'bracket-visibility = ##t
                    \override TupletBracket #'minimum-length = #3
                    \override TupletBracket #'padding = #2
                    \override TupletBracket #'springs-and-rods = #ly:spanner::set-spacing-rods
                    \override TupletNumber #'text = #tuplet-number::calc-fraction-text
                    autoBeaming = ##f
                    proportionalNotationDuration = #(ly:make-moment 1 32)
                    tupletFullLength = ##t
                }
                \context {
                    \StaffGroup
                }
                \context {
                    \Staff
                    \remove Time_signature_engraver
                }
                \context {
                    \RhythmicStaff
                    \remove Time_signature_engraver
                }
            }

            \paper {
                left-margin = #20
                system-system-spacing = #'((basic-distance . 0) (minimum-distance . 0) (padding . 12) (stretchability . 0))
            }

            \score {
                \new Score <<
                    \new TimeSignatureContext {
                        {
                            \time 2/8
                            s1 * 1/4
                        }
                        {
                            \time 3/8
                            s1 * 3/8
                        }
                        {
                            \time 4/8
                            s1 * 1/2
                        }
                    }
                    \new Staff {
                        {
                            \time 2/8
                            c'8 (
                            d'8 )
                        }
                        {
                            \time 3/8
                            e'8 (
                            f'8
                            g'8 )
                        }
                        {
                            \time 4/8
                            fs'4 (
                            e'8
                            d'8 )
                        }
                    }
                >>
            }

        ::

            >>> show(lilypond_file) # doctest: +SKIP

    Makes LilyPond file.

    Wraps `music` in LilyPond ``\score`` block.

    Adds LilyPond ``\header``, ``\layout``, ``\paper`` and ``\score`` blocks to
    LilyPond file.

    Defines layout settings for custom ``\TimeSignatureContext``.

    (Note that you must create and populate an Abjad context with name
    equal to ``'TimeSignatureContext'`` in order for ``\TimeSignatureContext``
    layout settings to apply.)

    Applies many file, layout and paper settings.

    Returns LilyPond file.
    '''
    from abjad.tools import layouttools
    from abjad.tools import lilypondfiletools

    lilypond_file = lilypondfiletools.make_basic_lilypond_file(music=music)

    lilypond_file.default_paper_size = 'letter', 'portrait'
    lilypond_file.global_staff_size = 12

    lilypond_file.paper_block.left_margin = 20
    vector = layouttools.make_spacing_vector(0, 0, 12, 0)
    lilypond_file.paper_block.system_system_spacing = vector

    #lilypond_file.layout_block.indent = 0
    lilypond_file.layout_block.ragged_right = True
    command = indicatortools.LilyPondCommand('accidentalStyle forget')
    lilypond_file.layout_block.items.append(command)

    block = _make_time_signature_context_block(font_size=1, padding=6)
    lilypond_file.layout_block.items.append(block)

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='Score', )
    lilypond_file.layout_block.items.append(context_block)
    context_block.accepts_commands.append('TimeSignatureContext')
    context_block.remove_commands.append('Bar_number_engraver')
    override(context_block).beam.breakable = True
    override(context_block).spacing_spanner.strict_grace_spacing = True
    override(context_block).spacing_spanner.strict_note_spacing = True
    override(context_block).spacing_spanner.uniform_stretching = True
    override(context_block).tuplet_bracket.bracket_visibility = True
    override(context_block).tuplet_bracket.padding = 2
    scheme = schemetools.Scheme('ly:spanner::set-spacing-rods')
    override(context_block).tuplet_bracket.springs_and_rods = scheme
    override(context_block).tuplet_bracket.minimum_length = 3
    scheme = schemetools.Scheme('tuplet-number::calc-fraction-text')
    override(context_block).tuplet_number.text = scheme
    set_(context_block).autoBeaming = False
    moment = schemetools.SchemeMoment((1, 24))
    set_(context_block).proportionalNotationDuration = moment
    set_(context_block).tupletFullLength = True

    # provided as a stub position for user customization
    context_block = lilypondfiletools.ContextBlock(
        source_context_name='StaffGroup', )
    lilypond_file.layout_block.items.append(context_block)

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='Staff', )

    lilypond_file.layout_block.items.append(context_block)
    context_block.remove_commands.append('Time_signature_engraver')

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='RhythmicStaff', )
    lilypond_file.layout_block.items.append(context_block)
    context_block.remove_commands.append('Time_signature_engraver')

    return lilypond_file
def make_ligeti_example_lilypond_file(music=None):
    r'''Makes Ligeti example LilyPond file.

    Returns LilyPond file.
    '''

    lilypond_file = lilypondfiletools.make_basic_lilypond_file(
        music=music,
        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 = lilypondfiletools.ContextBlock(
        source_context_name='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')
    override(context_block).beam.breakable = True
    override(context_block).glissando.breakable = True
    override(context_block).note_column.ignore_collision = True
    override(context_block).spacing_spanner.uniform_stretching = True
    override(context_block).text_script.staff_padding = 4
    override(context_block).text_spanner.breakable = True
    override(context_block).tuplet_bracket.bracket_visibility = True
    override(context_block).tuplet_bracket.minimum_length = 3
    override(context_block).tuplet_bracket.padding = 2
    scheme = schemetools.Scheme('ly:spanner::set-spacing-rods')
    override(context_block).tuplet_bracket.springs_and_rods = scheme
    scheme = schemetools.Scheme('tuplet-number::calc-fraction-text')
    override(context_block).tuplet_number.text = scheme
    set_(context_block).autoBeaming = False
    moment = schemetools.SchemeMoment((1, 12))
    set_(context_block).proportionalNotationDuration = moment
    set_(context_block).tupletFullLength = True

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='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 = schemetools.Scheme("'numbered")
    override(context_block).time_signature.style = scheme

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='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 = schemetools.Scheme("'numbered")
    override(context_block).time_signature.style = scheme
    override(context_block).vertical_axis_group.minimum_Y_extent = (-2, 4)

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='Voice', )
    lilypond_file.layout_block.items.append(context_block)
    context_block.remove_commands.append('Forbid_line_break_engraver')

    return lilypond_file
Exemple #7
0
def make_reference_manual_lilypond_file(music=None, **kwargs):
    r'''Makes reference manual LilyPond file.

        >>> score = Score([Staff('c d e f')])
        >>> lilypond_file = \
        ...     documentationtools.make_reference_manual_lilypond_file(score)

    ..  doctest::

        >>> print(format(lilypond_file)) # doctest: +SKIP
        \version "2.19.15"
        \language "english"
        <BLANKLINE>
        #(set-global-staff-size 12)
        <BLANKLINE>
        \header {
            tagline = ##f
        }
        <BLANKLINE>
        \layout {
            indent = #0
            ragged-right = ##t
            \context {
                \Score
                \remove Bar_number_engraver
                \override SpacingSpanner.strict-grace-spacing = ##t
                \override SpacingSpanner.strict-note-spacing = ##t
                \override SpacingSpanner.uniform-stretching = ##t
                \override TupletBracket.bracket-visibility = ##t
                \override TupletBracket.minimum-length = #3
                \override TupletBracket.padding = #2
                \override TupletBracket.springs-and-rods = #ly:spanner::set-spacing-rods
                \override TupletNumber.text = #tuplet-number::calc-fraction-text
                proportionalNotationDuration = #(ly:make-moment 1 24)
                tupletFullLength = ##t
            }
        }
        <BLANKLINE>
        \paper {
            left-margin = 1\in
        }
        <BLANKLINE>
        \score {
            \new Score <<
                \new Staff {
                    c4
                    d4
                    e4
                    f4
                }
            >>
        }

    Returns LilyPond file.
    '''
    from abjad.tools import lilypondfiletools
    from abjad.tools import schemetools

    assert hasattr(music, '__illustrate__')
    lilypond_file = music.__illustrate__(**kwargs)

    blocks = [
        _ for _ in lilypond_file.items
        if isinstance(_, lilypondfiletools.Block)
    ]
    header_block, layout_block, paper_block = None, None, None
    for block in blocks:
        if block.name == 'header':
            header_block = block
        elif block.name == 'layout':
            layout_block = block
        elif block.name == 'paper':
            paper_block = block

    # paper
    if paper_block is None:
        paper_block = lilypondfiletools.Block(name='paper')
        lilypond_file.items.insert(0, paper_block)
    paper_block.left_margin = lilypondfiletools.LilyPondDimension(1, 'in')

    # layout
    if layout_block is None:
        layout_block = lilypondfiletools.Block(name='layout')
        lilypond_file.items.insert(0, layout_block)
    # TODO: following line does nothing; must assign to paper_block instead
    #lilypond_file.line_width = lilypondfiletools.LilyPondDimension(6, 'in')
    layout_block.indent = 0
    layout_block.ragged_right = True

    # score context
    context_block = lilypondfiletools.ContextBlock(
        source_context_name='Score', )
    context_block.remove_commands.append('Bar_number_engraver')
    override(context_block).spacing_spanner.strict_grace_spacing = True
    override(context_block).spacing_spanner.strict_note_spacing = True
    override(context_block).spacing_spanner.uniform_stretching = True
    override(context_block).tuplet_bracket.bracket_visibility = True
    override(context_block).tuplet_bracket.padding = 2
    scheme = schemetools.Scheme('ly:spanner::set-spacing-rods')
    override(context_block).tuplet_bracket.springs_and_rods = scheme
    override(context_block).tuplet_bracket.minimum_length = 3
    scheme = schemetools.Scheme('tuplet-number::calc-fraction-text')
    override(context_block).tuplet_number.text = scheme
    moment = schemetools.SchemeMoment((1, 24))
    set_(context_block).proportionalNotationDuration = moment
    set_(context_block).tupletFullLength = True
    layout_block.items.append(context_block)

    # header
    if header_block is None:
        header_block = lilypondfiletools.Block(name='header')
        lilypond_file.items.insert(0, header_block)
    header_block.tagline = markuptools.Markup('""')

    # etc
    lilypond_file._date_time_token = None
    lilypond_file._global_staff_size = 12

    return lilypond_file
Exemple #8
0
def make_text_alignment_example_lilypond_file(music=None):
    r'''Makes text-alignment example LilyPond file.

        >>> score = Score([Staff('c d e f')])
        >>> lilypond_file = documentationtools.make_text_alignment_example_lilypond_file(score)

    ..  doctest::

        >>> print(format(lilypond_file)) # doctest: +SKIP
        % Abjad revision 5651
        % 2012-05-19 10:04

        \version "2.15.37"
        \language "english"

        #(set-global-staff-size 18)

        \layout {
            indent = #0
            ragged-right = ##t
            \context {
                \Score
                \remove Bar_number_engraver
                \remove Default_bar_line_engraver
                \override Clef #'transparent = ##t
                \override SpacingSpanner #'strict-grace-spacing = ##t
                \override SpacingSpanner #'strict-note-spacing = ##t
                \override SpacingSpanner #'uniform-stretching = ##t
                \override TextScript #'staff-padding = #4
                proportionalNotationDuration = #(ly:make-moment 1 32)
            }
        }

        \paper {
            bottom-margin = #10
            left-margin = #10
            line-width = #150
            system-system-spacing = #'(
                (basic-distance . 0) (minimum-distance . 0) (padding . 15) (stretchability . 0))
        }

        \score {
            \new Score <<
                \new Staff {
                    c4
                    d4
                    e4
                    f4
                }
            >>
        }

    Returns LilyPond file.
    '''
    from abjad.tools import layouttools
    from abjad.tools import lilypondfiletools
    from abjad.tools import schemetools

    lilypond_file = lilypondfiletools.make_basic_lilypond_file(music=music)

    lilypond_file.global_staff_size = 18

    lilypond_file.layout_block.indent = 0
    lilypond_file.layout_block.ragged_right = True

    context_block = lilypondfiletools.ContextBlock(
        source_context_name='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')
    override(context_block).clef.transparent = True
    override(context_block).spacing_spanner.strict_grace_spacing = True
    override(context_block).spacing_spanner.strict_note_spacing = True
    override(context_block).spacing_spanner.uniform_stretching = True
    override(context_block).text_script.staff_padding = 4
    override(context_block).time_signature.transparent = True
    moment = schemetools.SchemeMoment((1, 32))
    set_(context_block).proportionalNotationDuration = moment

    lilypond_file.paper_block.bottom_margin = 10
    lilypond_file.paper_block.left_margin = 10
    lilypond_file.paper_block.line_width = 150

    vector = layouttools.make_spacing_vector(0, 0, 15, 0)
    lilypond_file.paper_block.system_system_spacing = vector

    return lilypond_file
def make_reference_manual_lilypond_file(music=None, **kwargs):
    r'''Makes reference manual LilyPond file.

        >>> score = Score([Staff('c d e f')])
        >>> lilypond_file = \
        ...     documentationtools.make_reference_manual_lilypond_file(score)

    ..  doctest::

        >>> print(format(lilypond_file)) # doctest: +SKIP
        \version "2.19.15"
        \language "english"
        <BLANKLINE>
        #(set-global-staff-size 12)
        <BLANKLINE>
        \header {
            tagline = \markup {}
        }
        <BLANKLINE>
        \layout {
            indent = #0
            ragged-right = ##t
            \context {
                \Score
                \remove Bar_number_engraver
                \override SpacingSpanner #'strict-grace-spacing = ##t
                \override SpacingSpanner #'strict-note-spacing = ##t
                \override SpacingSpanner #'uniform-stretching = ##t
                \override TupletBracket #'bracket-visibility = ##t
                \override TupletBracket #'minimum-length = #3
                \override TupletBracket #'padding = #2
                \override TupletBracket #'springs-and-rods = #ly:spanner::set-spacing-rods
                \override TupletNumber #'text = #tuplet-number::calc-fraction-text
                proportionalNotationDuration = #(ly:make-moment 1 24)
                tupletFullLength = ##t
            }
        }
        <BLANKLINE>
        \paper {
            left-margin = 1\in
        }
        <BLANKLINE>
        \score {
            \new Score <<
                \new Staff {
                    c4
                    d4
                    e4
                    f4
                }
            >>
        }

    Returns LilyPond file.
    '''
    from abjad.tools import lilypondfiletools
    from abjad.tools import schemetools

    assert '__illustrate__' in dir(music)
    lilypond_file = music.__illustrate__(**kwargs)

    # header
    lilypond_file.header_block.tagline = markuptools.Markup('""')

    # layout
    lilypond_file.layout_block.indent = 0
    lilypond_file.line_width = lilypondfiletools.LilyPondDimension(6, 'in')
    lilypond_file.layout_block.ragged_right = True

    # paper
    lilypond_file.paper_block.left_margin = \
        lilypondfiletools.LilyPondDimension(1, 'in')

    # score context
    context_block = lilypondfiletools.ContextBlock(
        source_context_name='Score', )
    context_block.remove_commands.append('Bar_number_engraver')
    override(context_block).spacing_spanner.strict_grace_spacing = True
    override(context_block).spacing_spanner.strict_note_spacing = True
    override(context_block).spacing_spanner.uniform_stretching = True
    override(context_block).tuplet_bracket.bracket_visibility = True
    override(context_block).tuplet_bracket.padding = 2
    scheme = schemetools.Scheme('ly:spanner::set-spacing-rods')
    override(context_block).tuplet_bracket.springs_and_rods = scheme
    override(context_block).tuplet_bracket.minimum_length = 3
    scheme = schemetools.Scheme('tuplet-number::calc-fraction-text')
    override(context_block).tuplet_number.text = scheme
    moment = schemetools.SchemeMoment((1, 24))
    set_(context_block).proportionalNotationDuration = moment
    set_(context_block).tupletFullLength = True
    lilypond_file.layout_block.items.append(context_block)

    # etc
    lilypond_file.file_initial_system_comments[:] = []
    lilypond_file.global_staff_size = 12

    return lilypond_file