The symbols that are printed can be modified by setting
@code{pedal@var{X}Strings}, where @var{X} is one of the pedal types:
Sustain, Sostenuto or UnaCorda. Refer to the generated documentation of
-@rgrob{PianoPedal} for more information.
+@rgrob{SustainPedal}, for example, for more information.
Pedals can also be indicated by a sequence of brackets, by setting the
@code{pedal-type} property of SustainPedal grobs:
@end lilypond
The default '*Ped' style for sustain and damper pedals corresponds to
-@code{\pedal-type = #'text}. However @code{mixed} is the default style
+@code{\pedal-type = #'text}. However, @code{mixed} is the default style
for a sostenuto pedal:
@lilypond[fragment,verbatim]
c''4 \sostenutoDown d''4 e''4 c'4 f'4 g'4 a'4 \sostenutoUp
@end lilypond
+For fine-tuning of the appearance of a pedal bracket, the properties
+@code{edge-width}, @code{edge-height}, and @code{shorten-pair} of
+@code{PianoPedalBracket} grobs (see the detailed documentation of
+@rgrob{PianoPedalBracket}) can be modified. For example, the bracket
+may be extended to the end of the note head.
+
+@lilypond[fragment,verbatim]
+\property Staff.PianoPedalBracket \override #'shorten-pair = #'(0 . -1.0)
+c''4 \sostenutoDown d''4 e''4 c'4 f'4 g'4 a'4 \sostenutoUp
+@end lilypond
+
+
@c . {Arpeggio}
@node Arpeggio
--- /dev/null
+\version "1.5.43"
+\header{
+ texidoc = "Piano pedal symbols merge stop and start. The strings are configurable.
+Text style, bracket style, and a mixture of both are supported. "
+}
+
+
+
+
+\score{
+ \context Staff \notes\relative c'{
+
+ c4 d e f g
+ \sustainDown b c
+ c, [d16 c c c] [e e \sustainUp \sustainDown e e ] f4 \sustainUp
+ g\sustainDown b \sustainUp c
+ \property Staff.pedalSustainStrings = #'("-" "-P" "P")
+ \property Staff.SustainPedal \override #'padding = #-2
+ c, \sustainDown d e \sustainUp \sustainDown f
+ \sustainUp g b c
+
+ \property Staff.SustainPedal \override #'pedal-type = #'bracket
+
+ c4 d e \sustainDown b c c, \sustainUp \sustainDown [d8 c] [e8 e \sustainUp \sustainDown] f4 d
+ \sustainUp g \sustainDown b b, \sustainUp c'
+
+ \property Staff.UnaCordaPedal \override #'pedal-type = #'mixed
+
+ c4 d \unaCorda e f g
+ b \treCorde c
+
+
+ }
+ \paper{
+ }
+ \midi{
+ \tempo 4 = 60
+ }
+}
p->bracket_p_->set_bound (RIGHT, unsmob_grob(get_property ("currentMusicalColumn")));
- // Set a property so that the molecule-creating function will know whether the right edge should be angled ___/
- p->bracket_p_->set_grob_property("angle-right", gh_bool2scm((bool) p->req_l_drul_[START]) );
+ // Set a property so that the molecule-creating function will know whether the right edge should be flared ___/
+ p->bracket_p_->set_grob_property("right-widen", gh_bool2scm((bool) p->req_l_drul_[START]) );
add_bound_item (p->line_spanner_, p->bracket_p_->get_bound (RIGHT));
p->finished_bracket_p_ = p->bracket_p_;
p->bracket_p_ = new Spanner (get_property ("PianoPedalBracket"));
p->bracket_p_->set_interface (ly_symbol2scm ("piano-pedal-interface"));
- // Set a property so that the molecule-creating function will know whether the left edge should be angled \___
- p->bracket_p_->set_grob_property("angle-left", gh_bool2scm((bool) p->req_l_drul_[STOP]) );
+ // Set a property so that the molecule-creating function will know whether the left edge should be flared \___
+ p->bracket_p_->set_grob_property("left-widen", gh_bool2scm((bool) p->req_l_drul_[STOP]) );
// Set this property for 'mixed style' pedals, Ped._______/\ ,
// so the molecule function will shorten the ____ line by the length of the Ped. text.
if (p->item_p_)
p->bracket_p_->set_parent (p->item_p_, Y_AXIS);
- Side_position_interface::set_axis (p->bracket_p_, Y_AXIS);
- Side_position_interface::set_direction (p->bracket_p_, UP);
p->bracket_p_->set_bound (LEFT, unsmob_grob (get_property ("currentMusicalColumn")));
Axis_group_interface::add_element (p->line_spanner_, p->bracket_p_);
Pedal up-down (restart) indicated by the angled right and left edges
of consecutive pedals touching exactly to form an __/\__
Chris Jackson <chris@fluffhouse.org.uk>
-
- TODO: Pedal line extending to the end of the note
*/
void
{
Real thick = s->paper_l ()->get_var ("stafflinethickness");
- Real ss = Staff_symbol_referencer::staff_space (s);
- Drul_array<bool> a, broken;
+ Drul_array<bool> w, broken;
Drul_array<Real> height, width, shorten, r;
+ SCM pa = s->get_grob_property ("if-text-padding");
+ SCM ew = s->get_grob_property ("edge-width");
+ SCM eh = s->get_grob_property ("edge-height");
+ SCM sp = s->get_grob_property ("shorten-pair");
+ SCM wl = s->get_grob_property ("left-widen");
+ SCM wr = s->get_grob_property ("right-widen");
+
// Pedal has an angled left edge \__ or an angled right edge __/
- a[LEFT] = a[RIGHT] = false;
- SCM al = s->get_grob_property ("angle-left");
- SCM ar = s->get_grob_property ("angle-right");
- if (gh_boolean_p (al) )
- a[LEFT] = to_boolean (al);
- if (gh_boolean_p (ar) )
- a[RIGHT] = to_boolean (ar);
-
- height[LEFT] = ( to_boolean (s->get_grob_property ("text-start")) ?
- 0 :
- ss );
- height[RIGHT] = ss;
+ w[LEFT] = w[RIGHT] = false;
+ if (gh_boolean_p (wl) )
+ w[LEFT] = to_boolean (wl);
+ if (gh_boolean_p (wr) )
+ w[RIGHT] = to_boolean (wr);
Direction d = LEFT;
Interval e;
Real padding = 0;
- SCM pa = (s->get_grob_property ("if-text-padding"));
+
if (gh_number_p (pa) )
padding = gh_scm2double (pa);
+
do {
Item *b = s->get_bound (d);
r[d] = d * (e[-d] + padding);
broken[d] = b->break_status_dir () != CENTER;
- width[d] = (a[d] ? ss*d/2 : 0);
- if (broken[d])
- height[d] = 0;
+ width[d] = 0;
+ height[d] = 0;
+ shorten[d] = 0;
+ if ( w[d] && gh_pair_p (ew) )
+ width[d] += gh_scm2double (index_cell (ew, d)) * d;
+ if ( !broken[d] && (gh_pair_p (eh) ) )
+ height[d] = gh_scm2double (index_cell (eh, d));
+ if ( gh_pair_p (sp) )
+ shorten[d] = gh_scm2double (index_cell (sp, d));
}
while (flip (&d) != LEFT);
- shorten[RIGHT] = shorten[LEFT] = 0;
Real extra_short = 0;
// For 'Mixed' style pedals, i.e. a bracket preceded by text: Ped._____|
// need to shorten by the extent of the text grob
if ( to_boolean (s->get_grob_property ("text-start")) )
{
+ height[LEFT] = 0;
Grob * textbit = s->get_parent(Y_AXIS);
extra_short = padding;
if (textbit->has_interface(ly_symbol2scm("piano-pedal-interface")))
// Shorten bracket on the right so it ends just before the spanned note.
shorten[RIGHT] += thick - (r[LEFT] + r[RIGHT]);
- // Hmm. TODO: This should be set in grob-description.scm, but side-positioning
- // of consecutive brackets only seems to work if direction is +1 within the engraver.
- s->set_grob_property ("direction", gh_int2scm(-1));
-
s->set_grob_property ("edge-height", gh_cons ( gh_double2scm ( height[LEFT] ) ,
gh_double2scm ( height[RIGHT]) ) );
s->set_grob_property ("edge-width", gh_cons ( gh_double2scm ( width[LEFT] ),
(lambda (x) (modify-syntax-entry
(car x) (cdr x) LilyPond-mode-syntax-table)))
'(( ?\( . "." ) ( ?\) . "." )
- ( ?\[ . "." ) ( ?\] . "." )
+ ( ?\[ . "(]" ) ( ?\] . ")[" )
( ?\{ . "(}2b" )
( ?\} . "){4b" )
( ?\< . "." )( ?\> . ".")