Source code for auxjad.spanners.piano_pedal

from textwrap import dedent
from typing import Union

import abjad
from abjad import piano_pedal as piano_pedal_


[docs]def piano_pedal(argument: Union[abjad.Component, abjad.Selection], *, half_pedal: bool = False, until_the_end: bool = False, omit_raise_pedal_glyph: bool = False, selector: abjad.Expression = abjad.select().leaves(), start_piano_pedal: abjad.StartPianoPedal = None, stop_piano_pedal: abjad.StopPianoPedal = None, tag: abjad.Tag = None, ) -> None: r"""Attaches piano pedal indicators. This function extends the capabilities of Abjad's built-in |abjad.piano_pedal()|. Basic usage: Basic usage is identical to Abjad's built-ind |abjad.piano_pedal()|: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:]) >>> abjad.show(staff) .. docs:: \new Staff { c'4 \sustainOn d'4 e'4 f'4 \sustainOff } .. figure:: ../_images/piano_pedal-KaleXflNvL.png .. note:: Auxjad automatically replaces Abjad's built-in |abjad.piano_pedal()| with this function. Therefore it can be used either as :func:`abjad.piano_pedal()` or |abjad.piano_pedal()|, as shown below: >>> staff1 = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> staff2 = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff1[:]) >>> auxjad.piano_pedal(staff2[:]) >>> selections = [staff1[:], staff2[:]] >>> auxjad.get.selections_are_identical(selections) True ``until_the_end``: Call the function with ``until_the_end`` set to ``True`` to add an arrow to the initial pedal glyph: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:], ... until_the_end=True, ... ) >>> abjad.show(staff) .. docs:: \new Staff { \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } \raise #-0.3 "→" } #})) c'4 \sustainOn d'4 e'4 f'4 \sustainOff } .. figure:: ../_images/piano_pedal-rA7ZHeMrjf.png ``omit_raise_pedal_glyph``: Call the function with ``omit_raise_pedal_glyph`` set to ``True`` to remove the raise pedal glyph: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:], ... omit_raise_pedal_glyph=True, ... ) >>> abjad.show(staff) .. docs:: \new Staff { c'4 \sustainOn d'4 e'4 \once \override Staff.SustainPedal.stencil = ##f f'4 \sustainOff } .. figure:: ../_images/piano_pedal-p8S1KwHLIx.png Combined with ``until_the_end=True``: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:], ... until_the_end=True, ... omit_raise_pedal_glyph=True, ... ) >>> abjad.show(staff) .. docs:: \new Staff { \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } \raise #-0.3 "→" } #})) c'4 \sustainOn d'4 e'4 \once \override Staff.SustainPedal.stencil = ##f f'4 \sustainOff } .. figure:: ../_images/piano_pedal-Fb5rE6QB1f.png ``half_pedal``: Call the function with ``half_pedal`` set to ``True`` to use the half pedalling glyph: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:], ... half_pedal=True, ... ) >>> abjad.show(staff) .. docs:: \new Staff { \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \larger "½" \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } } #})) c'4 \sustainOn d'4 e'4 f'4 \sustainOff } .. figure:: ../_images/piano_pedal-EYs495mi9K.png Combined with ``until_the_end=True``: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:], ... half_pedal=True, ... until_the_end=True, ... ) >>> abjad.show(staff) .. docs:: \new Staff { \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \larger "½" \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } \raise #-0.3 "→" } #})) c'4 \sustainOn d'4 e'4 f'4 \sustainOff } .. figure:: ../_images/piano_pedal-viOZdVeRs9.png Pedal style: The style of the sustain pedal can be tweaked using |abjad.setting()| as shown below: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:]) >>> abjad.setting(staff).pedal_sustain_style = "#'mixed" >>> abjad.show(staff) .. docs:: \new Staff \with { pedalSustainStyle = #'mixed } { c'4 \sustainOn d'4 e'4 f'4 \sustainOff } .. figure:: ../_images/piano_pedal-6q9Swb2elq.png This tweak also works with ``until_the_end=True`` if desired: >>> staff = abjad.Staff(r"c'4 d'4 e'4 f'4") >>> abjad.piano_pedal(staff[:], ... until_the_end=True, ... ) >>> abjad.setting(staff).pedal_sustain_style = "#'mixed" >>> abjad.show(staff) .. docs:: \new Staff \with { pedalSustainStyle = #'mixed } { \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } \raise #-0.3 "→" } #})) c'4 \sustainOn d'4 e'4 f'4 \sustainOff } .. figure:: ../_images/piano_pedal-cYyRwFvnFH.png """ assert isinstance(selector, abjad.Expression) argument = selector(argument) leaves = abjad.Selection(argument).leaves() start_leaf = leaves[0] stop_leaf = leaves[-1] if not half_pedal and until_the_end: string = r""" \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } \raise #-0.3 "→" } #})) """ elif half_pedal and not until_the_end: string = r""" \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \larger "½" \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } } #})) """ elif half_pedal and until_the_end: string = r""" \once \override Staff.SustainPedal.stencil = #(lambda (grob) (grob-interpret-markup grob #{ \markup { \larger "½" \concat { \musicglyph "pedal.Ped" \musicglyph "pedal.." } \raise #-0.3 "→" } #})) """ if half_pedal or until_the_end: string = dedent(string).strip() pedal_tweak = abjad.LilyPondLiteral(string) abjad.attach(pedal_tweak, start_leaf) if omit_raise_pedal_glyph: omit_raise_pedal_glyph_tweak = abjad.LilyPondLiteral( r"\once \override Staff.SustainPedal.stencil = ##f" ) abjad.attach(omit_raise_pedal_glyph_tweak, stop_leaf) piano_pedal_(argument=argument, selector=selector, start_piano_pedal=start_piano_pedal, stop_piano_pedal=stop_piano_pedal, tag=tag, )
### MONKEY PATCHING ### abjad.spanners.piano_pedal = piano_pedal abjad.piano_pedal = piano_pedal