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
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
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
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
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
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