def test_LilyPondParser__indicators__Markup_04():

    command1 = abjad.MarkupCommand("bold", ["A", "B", "C"])
    command2 = abjad.MarkupCommand("italic", "123")
    markup = abjad.Markup((command1, command2))

    parser = abjad.parser.LilyPondParser()
    result = parser(abjad.lilypond(markup))

    assert isinstance(result, abjad.Markup)
    assert abjad.lilypond(result) == abjad.lilypond(markup)
Example #2
0
def test_lilypondparsertools_LilyPondParser__indicators__Markup_04():

    command1 = abjad.MarkupCommand('bold', ['A', 'B', 'C'])
    command2 = abjad.MarkupCommand('italic', '123')
    markup = abjad.Markup((command1, command2))

    parser = abjad.lilypondparsertools.LilyPondParser()
    result = parser(format(markup, 'lilypond'))

    assert isinstance(result, abjad.Markup)
    assert format(result, 'lilypond') == format(markup, 'lilypond')
Example #3
0
 def _markup(self) -> abjad.Markup:
     return abjad.Markup(
         [
             abjad.MarkupCommand("vspace", -0.25),
             abjad.MarkupCommand("fontsize", -4),
             abjad.MarkupCommand("rounded-box",
                                 ['{}'.format(self.n_times)]),
             abjad.MarkupCommand("hspace", -0.4),
             abjad.MarkupCommand(
                 "path", 0.25,
                 abjad.LilyPondLiteral(self._ornamentation_path)),
         ],
         direction="up",
     )
Example #4
0
    def _to_score_markup(selection):
        import abjad

        staff, layout_block = Duration._make_markup_score_block(selection)
        command = abjad.MarkupCommand("score", [staff, layout_block])
        markup = abjad.Markup(command)
        return markup
Example #5
0
 def _make_circle_outline_markup(size):
     circle_outline = abjad.MarkupCommand(
         'draw-circle',
         size,
         0.25,
         False
     )
     return abjad.Markup(circle_outline)
Example #6
0
def scpm(position: str) -> abjad.Markup:
    return abjad.Markup(
        [
            abjad.MarkupCommand("fontsize", -2.4),
            abjad.StringContactPoint(position).markup,
        ],
        direction="up",
    )
Example #7
0
 def _make_score_block(self,
                       make_layout_block: bool = False
                       ) -> abjad.LilyPondFile:
     score_block = super()._make_score_block(make_layout_block)
     local_header = abjad.Block("header")
     local_header.piece = abjad.Markup(
         abjad.MarkupCommand(
             "center-column",
             [
                 abjad.MarkupCommand("vspace", 0),
                 abjad.MarkupCommand(
                     "rounded-box",
                     [
                         abjad.MarkupCommand("fontsize", 1.5),
                         abjad.MarkupCommand("smallCaps"),
                         "{}".format(self.title),
                     ],
                 ),
             ],
         ))
     score_block.items.append(local_header)
     return score_block
Example #8
0
    def __call__(self):
        '''Calls woodwind fingering.

        Returns markup command.
        '''
        import abjad
        key_groups_as_scheme = []
        cc_scheme_pair = abjad.SchemePair(('cc', self._center_column))
        key_groups_as_scheme.append(cc_scheme_pair)
        lh_scheme_pair = abjad.SchemePair(('lh', self._left_hand))
        key_groups_as_scheme.append(lh_scheme_pair)
        rh_scheme_pair = abjad.SchemePair(('rh', self._right_hand))
        key_groups_as_scheme.append(rh_scheme_pair)
        key_groups_as_scheme = abjad.Scheme(
            key_groups_as_scheme,
            quoting="'",
            )
        instrument_as_scheme = abjad.Scheme(self._name, quoting="'")
        return abjad.MarkupCommand(
            'woodwind-diagram',
            instrument_as_scheme,
            key_groups_as_scheme,
            )
Example #9
0
COMPOSITION_PATH = "aml/composition"
BUILD_PATH = "aml/build"
SCORE_PATH = "{}/score".format(BUILD_PATH)
PARTBOOKS_PATH = "{}/partbooks".format(SCORE_PATH)
INTRODUCTION_PATH = "{}/introduction".format(BUILD_PATH)
INTRODUCTION_PICTURES_PATH = "{}/pictures".format(INTRODUCTION_PATH)
COVER_PATH = "aml/cover"
STOCHASTIC_PITCH_ANALYSIS_PATH = "aml/stochastic_pitch_analysis"

PYO_SERVER = pyo.Server(sr=44100, audio="offline", nchnls=3)
PYO_SERVER.boot()


ADD_COMPROVISATION = False

# paper format for score
FORMAT = mus.A4

NONVIB_MARKUP = abjad.Markup(
    [abjad.MarkupCommand("fontsize", -2.3), abjad.MarkupCommand("italic", ["non vibrato"])],
    direction=abjad.enums.Up,
)
CON_SORDINO_MARKUP = abjad.Markup(
    [abjad.MarkupCommand("fontsize", -2.3), abjad.MarkupCommand("italic", ["con sordino"])],
    direction=abjad.enums.Up,
)
ATEMPO_MARKUP = abjad.Markup(
    [abjad.MarkupCommand("fontsize", -2.3), abjad.MarkupCommand("italic", ["a tempo"])],
    direction=abjad.enums.Up,
)
Example #10
0
def main(name: str,
         ignore_accidentals_higher_than_semitone: bool = True) -> None:
    pitch = 7
    note_duration = fractions.Fraction(1, 1)

    staff = []
    for nth in range(23):
        diff_written = fractions.Fraction(nth - 11, 12)
        diff_true = fractions.Fraction(nth - 11, 6)

        note = abjad.Note(abjad.NamedPitch(pitch + diff_true), note_duration)

        if diff_written == 0:
            marking = None
        else:
            marking = "{}/{}".format(diff_written.numerator,
                                     diff_written.denominator)
            marking = abjad.MarkupCommand("fraction {} {}".format(
                abs(diff_written.numerator), diff_written.denominator))
            if diff_written > 0:
                prefix = "+"
            else:
                prefix = "-"

        if marking:
            markup = abjad.Markup(
                [abjad.MarkupCommand("abs-fontsize", 8, [prefix, marking])],
                direction="up",
            )
            abjad.attach(markup, note)

        staff.append(note)

        if nth == 11:
            abjad.Accidental.respell_with_flats(staff)

    abjad.Accidental.respell_with_sharps(staff[17:])

    if ignore_accidentals_higher_than_semitone:
        staff = staff[5:18]

    staff = abjad.Staff(staff)

    abjad.attach(lily.mk_no_time_signature(), staff[0])
    abjad.attach(abjad.TimeSignature((len(staff), 1)), staff[0])
    abjad.attach(
        abjad.LilyPondLiteral(
            "\\override Score.SpacingSpanner.strict-note-spacing = ##t",
            format_slot="before",
        ),
        staff[0],
    )
    abjad.attach(
        abjad.LilyPondLiteral("\\newSpacingSection", format_slot="before"),
        staff[0])
    abjad.attach(
        abjad.LilyPondLiteral(
            "\\override Score.SpacingSpanner.base-shortest-duration = #(ly:make-moment"
            + " 1/16)",
            format_slot="before",
        ),
        staff[0],
    )

    sco = abjad.Score([staff])

    header_block = abjad.Block("header")
    header_block.piece = abjad.Markup(
        abjad.MarkupCommand(
            "center-column",
            [
                abjad.MarkupCommand("fontsize", -1.5),
                abjad.MarkupCommand("smallCaps"),
                "12-tone accidentals",
                abjad.MarkupCommand("vspace", -0.35),
            ],
        ))
    lily.make_small_example(sco, name, header_block=header_block)
Example #11
0
from mu.utils import infit

from mutools import attachments
from mutools import lily

from aml import globals_
from aml import tweaks as tw
from aml import versemaker

from aml.trackmaker import keyboard
from aml.trackmaker import strings

ARCO = attachments.StringContactPoint("arco")
PIZZ = attachments.StringContactPoint("pizzicato")
FLAUTANDO = abjad.Markup(
    abjad.MarkupCommand("italic", ["flautando"]), direction=abjad.enums.Up
)

#####################################################
#            post processing functions              #
#####################################################


def _adapt_violin(violin: lily.NOventLine, vm) -> None:
    tw.change_octave(4, 1, violin)
    tw.change_octave(5, 1, violin)
    tw.change_octave(6, -1, violin)
    tw.change_octave(7, -1, violin)
    violin[7].optional = None
    violin[7].volume = 1.2
    tw.split_by_structure(5, 3, violin, vm, adapt_by_changed_structure=True)
Example #12
0
def _notate(name: str, instrument: str, scale: tuple) -> None:
    for add_harmonics in (False, True):
        if add_harmonics:
            harmonics_dict = {
                key: value[0]
                for key, value in globals_.RATIO2ARTIFICAL_HARMONIC_PITCHCLASS_AND_ARTIFICIAL_HARMONIC_OCTAVE.items()
            }

        if instrument == "violin":
            clef = abjad.Clef("treble")
            header_distance = -0.4
        elif instrument == "viola":
            clef = abjad.Clef("alto")
            header_distance = -1
        elif instrument == "cello":
            clef = abjad.Clef("bass")
            header_distance = -1
        else:
            raise NotImplementedError(instrument)

        staff = abjad.Staff([])
        for idx, pitch in enumerate(scale):
            abjad_pitch = lily.convert2abjad_pitch(pitch, globals_.RATIO2PITCHCLASS)

            if add_harmonics:
                (
                    _,
                    octave,
                ) = globals_.RATIO2ARTIFICAL_HARMONIC_PITCHCLASS_AND_ARTIFICIAL_HARMONIC_OCTAVE[
                    pitch.register(0)
                ]
                harmonic_pitch = lily.convert2abjad_pitch(
                    pitch + ji.JIPitch([octave]), harmonics_dict
                )
                chord = abjad.Chord(
                    sorted([abjad_pitch, harmonic_pitch]), abjad.Duration(1)
                )
                abjad.tweak(chord.note_heads[1]).style = "harmonic"
                staff.append(chord)
            else:
                staff.append(abjad.Note(abjad_pitch, abjad.Duration(1)))

        abjad.attach(lily.mk_no_time_signature(), staff[0])
        abjad.attach(abjad.TimeSignature((len(staff), 1)), staff[0])
        abjad.attach(clef, staff[0])
        abjad.attach(
            abjad.LilyPondLiteral(
                "\\override Score.SpacingSpanner.strict-note-spacing = ##t",
                format_slot="before",
            ),
            staff[0],
        )
        abjad.attach(
            abjad.LilyPondLiteral("\\newSpacingSection", format_slot="before"), staff[0]
        )
        abjad.attach(
            abjad.LilyPondLiteral(
                "\\override Score.SpacingSpanner.base-shortest-duration ="
                " #(ly:make-moment"
                + " 1/8)",
                format_slot="before",
            ),
            staff[0],
        )

        abjad.attach(
            abjad.LilyPondLiteral("\\accidentalStyle dodecaphonic", "before"), staff[0],
        )

        sco = abjad.Score([staff])

        if add_harmonics:
            descr = "scale for {} with artificial harmonics".format(instrument)
        else:
            descr = "scale for {}".format(instrument)

        header_block = abjad.Block("header")
        header_block.piece = abjad.Markup(
            abjad.MarkupCommand(
                "center-column",
                [
                    abjad.MarkupCommand("fontsize", -1.5),
                    abjad.MarkupCommand("smallCaps"),
                    descr,
                    abjad.MarkupCommand("vspace", header_distance),
                ],
            )
        )
        final_file_name = "{}/pictures/scale_{}".format(name, instrument)

        if add_harmonics:
            final_file_name = "{}_artificial_harmonics".format(final_file_name)

        lily.make_small_example(sco, final_file_name, header_block=header_block)
Example #13
0
    def _make_full_score_pdf_notation_for_each_instrument(self) -> None:
        for paper_format in (mus.A3, mus.A4):
            for meta_track in globals_.ORCHESTRATION:
                notation_path = "{}/notation/full_score/{}/{}".format(
                    self.path, paper_format.name, meta_track)
                is_first = True
                for verse in self.verses:
                    track = getattr(verse, meta_track)
                    track.format = paper_format
                    if is_first:
                        track.indent_first = True
                        track.global_staff_size = 20
                        lpf = track._make_lilypond_file(
                            make_layout_block_global=False)

                    else:
                        track.indent_first = False
                        lpf.items.append(
                            track._make_score_block(make_layout_block=True))

                    last_score_block = lpf.items[-1]

                    instr_staff = abjad.mutate(
                        last_score_block.items[0][0][1]).copy()
                    instr_obj = globals_.INSTRUMENT_NAME2OBJECT[meta_track]

                    if is_first:
                        abjad.setting(
                            instr_staff).instrument_name = instr_obj.markup

                    else:
                        abjad.setting(
                            instr_staff
                        ).instrument_name = instr_obj.short_markup

                    abjad.setting(
                        instr_staff
                    ).short_instrument_name = instr_obj.short_markup
                    last_score_block.items[0] = abjad.Score([instr_staff])

                    for other_meta_track in reversed(
                            tuple(iter(globals_.ORCHESTRATION))):
                        if meta_track != other_meta_track:
                            other_track = getattr(verse, other_meta_track)
                            new_staff = abjad.mutate(
                                other_track.score[0][1]).copy()
                            if type(new_staff) == abjad.StaffGroup:
                                for sub_staff in new_staff:
                                    self._detach_optional_tone_tweaks(
                                        sub_staff)
                            else:
                                self._detach_optional_tone_tweaks(new_staff)

                            instr_obj = globals_.INSTRUMENT_NAME2OBJECT[
                                other_meta_track]
                            magstep = abjad.Scheme(
                                ["magstep", self._orientation_staff_size])
                            abjad.override(
                                new_staff).staff_symbol.thickness = magstep
                            abjad.override(
                                new_staff).staff_symbol.staff_space = magstep
                            abjad.setting(
                                new_staff
                            ).font_size = self._orientation_staff_size

                            if is_first:
                                instrument_name_markup = instr_obj.name
                            else:
                                instrument_name_markup = instr_obj.short_name

                            instrument_name_markup = (
                                instrument_name_markup[0].capitalize() +
                                instrument_name_markup[1:].lower())

                            if is_first:
                                short_instrument_name_markup = instr_obj.short_name
                                short_instrument_name_markup = (
                                    short_instrument_name_markup[0].capitalize(
                                    ) +
                                    short_instrument_name_markup[1:].lower())
                            else:
                                short_instrument_name_markup = instrument_name_markup

                            if other_meta_track == "keyboard":
                                instrument_name_markup = abjad.Markup([
                                    abjad.MarkupCommand(
                                        "fontsize",
                                        self._orientation_staff_size),
                                    instrument_name_markup,
                                ])
                                short_instrument_name_markup = abjad.Markup([
                                    abjad.MarkupCommand(
                                        "fontsize",
                                        self._orientation_staff_size),
                                    short_instrument_name_markup,
                                ])

                            else:
                                instrument_name_markup = abjad.Markup(
                                    instrument_name_markup)
                                short_instrument_name_markup = abjad.Markup(
                                    short_instrument_name_markup)

                            abjad.setting(
                                new_staff
                            ).instrument_name = instrument_name_markup
                            abjad.setting(
                                new_staff
                            ).short_instrument_name = short_instrument_name_markup
                            last_score_block.items[0].insert(0, new_staff)

                        else:
                            copied_staff = abjad.mutate(
                                last_score_block.items[0][-1]).copy()
                            del last_score_block.items[0][-1]
                            last_score_block.items[0].insert(0, copied_staff)

                    is_first = False

                if self._title:
                    lpf.header_block.title = abjad.Markup(self._title)

                track._notate(notation_path, lpf)