lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(de)cresendi syntax


From: Frédéric Bron
Subject: (de)cresendi syntax
Date: Sun, 22 Feb 2009 09:25:57 +0100
User-agent: Thunderbird 2.0.0.19 (Windows/20081209)

Hello,

I am in charge of the question of (de)crescendo syntax issue in 2.12.2.

Here is what lilypond 2.12.2 currently does (in ly/spanners-init.ly):

- \< and \cr are equivalent: they start a crescendo event on the previous note: #(make-span-event 'CrescendoEvent START) - \> and \decr are equivalent: they start a decrescendo event on the previous note: #(make-span-event 'DecrescendoEvent START) - \!, \endcr and \enddecr are equivalent: they stop of (de)cresendo event on the previous note: #(make-span-event 'CrescendoEvent STOP), #(make-span-event 'DecrescendoEvent STOP) (is it really equivalent?)

- the following commands set the (de)cresendo to be text with dashed line or hairpin forever (until changed to something else):
  . crescTextCresc -> text "cresc."
  . dimTextDecresc -> text "decresc."
  . dimTextDecr -> text "decr."
  . dimTextDim -> text "dim."
  . crescHairpin -> hairpin
  . dimHairpin -> hairpin

- the following commands start a text (de)crescendo on the next note (affects only the next (de)crescendo):
  . cresc -> text "cresc."
  . dim -> text "dim."
- the following commands stop a (de)crescendo on the next note:
  . enddim
  . endcresc


Current syntax is not satisfactory because:

- syntax is different between \<, \>, \! and \cresc, \dim, \enddim, \endcresc (undocumented):
  . \<, \>, \! apply to the previous note,
  . \cresc, \dim, \enddim, \endcresc apply to the next note
- there is no symmetry between \crescTextXXXX, \dimTextXXXX commands and \XXXX commands
- some people just want cresc. to be printed without dashed line (spanner)
- \endcresc does something different from \endcr which is confusing


Here are my dreams:

- \<, \>, \! are used to start/stop (de)crescendo spanner (hairpin or text),
- crescTextXXX, dimTextXXX, crescHairpin, dimHairpin decide if \<, \>, \! produce text or hairpin (applies for ever until changed to something else), I would prefer simpler syntax: \crescCresc, \crescHairpin, \dimDim, \dimDecr, \dimDecresc, i.e. remove Text - \<"cresc.", \<"cresc. poco a poco", \>"dim."... produce a text spanner with corresponding text, the spanner is ended with \!, the text applies only once, i.e. next (de)crescendo produces hairpin if this is the current setting - \cresc, \dim, \decr, \decresc produce a text without spanner, applies only once to the previous note, no need to finish with \! or \endcresc, this could be implemented with a \markup command
- remove unnecessary \cr, \endcr, \decr, \enddecr
- remove unnecessary \enddim, \endcresc

I know that it is not possible to implement this only with scheme and lily code but I am sure it is possible in C++.

Could you please comment on these propositions and give any other ideas.

F. Bron

PS: attached is a file that show the behaviour of the commands.
\version "2.12.2"
%{
1) Make a table of all the crescendo and decrescendo forms, so we can
see at a glance the missing/broken pieces.
2) Make a patch for v. 2.13 (when it's started) to get the appropriate
symmetry for all forms.  This will require posting the table from 1)
on -user and getting feedback from users.
3) Make a patch for convert-ly, which will do two things:
a) fix the problem you've identified for the previous convert-ly rule for
2.12
b) Make a correct convert-ly rule for 2.13.

\<
\!
cr = #(make-span-event 'CrescendoEvent START) -> equivalent to \<
decr = #(make-span-event 'DecrescendoEvent START) -> equivalent to \>
enddecr = #(make-span-event 'DecrescendoEvent STOP) -> equivalent to \!
endcr = #(make-span-event 'CrescendoEvent STOP) -> equivalent to \!

cresc =
2.10.33: { #(ly:export (make-event-chord (list cr)))            \set 
crescendoText =   \markup { \italic "cresc." }       \set crescendoSpanner = 
#'dashed-line }
2.12.2:  { #(ly:export (make-event-chord (list cr)))      \once \set 
crescendoText =   \markup { \italic "cresc." } \once \set crescendoSpanner = 
#'text }
dim =
2.10.33: { #(ly:export (make-event-chord (list decr)))          \set 
decrescendoText = \markup { \italic "dim." }         \set decrescendoSpanner = 
#'dashed-line }
2.12.2:  { #(ly:export (make-event-chord (list decr)))    \once \set 
decrescendoText = \markup { \italic "dim." }   \once \set decrescendoSpanner = 
#'text }
enddim =
2.10.33: { #(ly:export (make-event-chord (list enddecr))) \unset 
decrescendoText \unset decrescendoSpanner }
2.12.2:  { #(ly:export (make-event-chord (list enddecr))) }
endcresc =
2.10.33: { #(ly:export (make-event-chord (list endcr)))   \unset crescendoText 
\unset crescendoSpanner }
2.12.3:  { #(ly:export (make-event-chord (list endcr))) }

2.10.33:
setTextCresc =   { \set crescendoText =   \markup { \italic "cresc." }   \set 
crescendoSpanner = #'dashed-line }
setTextDecresc = { \set decrescendoText = \markup { \italic "decr." }    \set 
decrescendoSpanner = #'dashed-line }
setTextDim =     { \set decrescendoText = \markup { \italic "dim." }     \set 
decrescendoSpanner = #'dashed-line }
2.12.2:
crescTextCresc = { \set crescendoText =   \markup { \italic "cresc." }   \set 
crescendoSpanner = #'text   \override DynamicTextSpanner #'style = 
#'dashed-line }
dimTextDecresc = { \set decrescendoText = \markup { \italic "decresc." } \set 
decrescendoSpanner = #'text \override DynamicTextSpanner #'style = 
#'dashed-line }
dimTextDecr =    { \set decrescendoText = \markup { \italic "decr." }    \set 
decrescendoSpanner = #'text \override DynamicTextSpanner #'style = 
#'dashed-line }
dimTextDim =     { \set decrescendoText = \markup { \italic "dim." }     \set 
decrescendoSpanner = #'text \override DynamicTextSpanner #'style = 
#'dashed-line }

2.10.33:
setHairpinCresc =   { \unset crescendoText   \unset crescendoSpanner }
setHairpinDecresc = { \unset decrescendoText \unset decrescendoSpanner }
setHairpinDim =     { \unset decrescendoText \unset decrescendoSpanner }
2.12.2:
crescHairpin =      { \unset crescendoText   \unset crescendoSpanner }
dimHairpin =        { \unset decrescendoText \unset decrescendoSpanner }

grob properties:
\override context.name #'property = #value -> for ever, default context=Voice
\once \override context.name #'property = #value -> only once
\revert comes back to previous value (same context) after \override

context properties:
\set context.prop = #value default context=current bottom-most
\once \set context.prop = #value
\unset -> same context must be used

%}

music= \relative {
        \set Score.currentBarNumber = #1
        c4^\markup \typewriter { "\<" }     \<     c c c^\markup \typewriter { 
"\!" } \! % 1
        c ^\markup \typewriter { "\cr" }    \cr    c c c^\markup \typewriter { 
"\!" } \! % 2
        c ^\markup \typewriter { "\cresc" } \cresc c c c^\markup \typewriter { 
"\!" } \! % 3
        c ^\markup \typewriter { "\<" }     \<     c c c^\markup \typewriter { 
"\!" } \! % 4
        \break
        c^\markup \typewriter { "\>" }      \>     c c c^\markup \typewriter { 
"\!" } \! % 5
        c^\markup \typewriter { "\decr" }   \decr  c c c^\markup \typewriter { 
"\!" } \! % 6
        c^\markup \typewriter { "\dim" }    \dim   c c c^\markup \typewriter { 
"\!" } \! % 7
        c^\markup \typewriter { "\<" }      \>     c c c^\markup \typewriter { 
"\!" } \! % 8
        \break
}
\paper {
        indent = 0\mm
}
{
        \override Score.BarNumber #'break-visibility = #'#(#t #t #t)
        \override Score.RehearsalMark #'self-alignment-X = #LEFT
        \time 4/4
        \mark \markup \typewriter { "default" } \music
        \crescTextCresc
        \mark \markup \typewriter { "crescTextCresc" } \music
        \crescHairpin
        \mark \markup \typewriter { "crescHairpin" } \music
        \dimTextDecresc
        \mark \markup \typewriter { "dimTextDecresc" } \music
        \dimTextDecr
        \mark \markup \typewriter { "dimTextDecr" } \music
        \dimTextDim
        \mark \markup \typewriter { "dimTextDim" } \music
        \dimHairpin
        \mark \markup \typewriter { "dimHairpin" } \music
}

reply via email to

[Prev in Thread] Current Thread [Next in Thread]