lilypond-user
[Top][All Lists]
Advanced

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

Re: Mysterious behavior in music function


From: Thomas Morley
Subject: Re: Mysterious behavior in music function
Date: Mon, 5 Aug 2019 00:19:30 +0200

Am So., 4. Aug. 2019 um 22:49 Uhr schrieb Marc Evanstein
<address@hidden>:
>
> Hi all,
>
> I'm trying to define a music function that adds a gliss after a note down to 
> a second parenthesized grace note. I've tried the following, but the gliss 
> doesn't show up:
>
> \version "2.19.83"
> \language "english"
>
> bendDown =
> #(define-music-function
>    (parser location firstNote secondNote)
>    (ly:music? ly:music?)
>     #{
>       \afterGrace
>       $firstNote
>       \glissando
>       \once \override Stem.stencil = ##f
>       \once \override Flag.stencil = ##f
>       \parenthesize $secondNote
>     #}
>   )
>
> \score {
>   \new Staff \with { instrumentName = #"Flute" }
>   {
>     \bendDown g'2 f'4
>   }
> }
>
> More than this, what I'm truly puzzled by is that if I remove "\afterGrace" 
> and just let the second note be a normal note, I get an error:
>
> error: syntax error, unexpected EVENT_IDENTIFIER
>
> \glissando
>
> If I copy paste the function text replacing the variables, then I get almost 
> what I want, except that the stem of the grace note is still there:
>
> \score {
>   \new Staff \with { instrumentName = #"Flute" }
>   {
>     \afterGrace
>     g'2
>     \glissando
>     \once \override Stem.stencil = ##f
>     \once \override Flag.stencil = ##f
>     \parenthesize f'4
>   }
> }
>
> What does seem to totally work is to use a regular grace instead of an 
> afterGrace, except that I can't seem to write it as a music function without 
> getting that same "unexpected EVENT_IDENTIFIER" error:
>
> \score {
>   \new Staff \with { instrumentName = #"Flute" }
>   {
>     g'2
>     \glissando
>     \grace
>     \once \override Stem.stencil = ##f
>     \once \override Flag.stencil = ##f
>     \parenthesize f'4
>   }
> }
>
> Can anyone shed some light on this for me?
>
> Thanks in advance!
>
> Marc

Hi Marc,

two Problems:
(1)
A postevent can't be attached to a music-variable, this feature will
be likely be available with next stable. See:
one = c'4
two = d'4
{ $one \glissando $two }
which returns the known error.
But you can workaround by attaching the postevent to an empty chord in
front of the musical variable, then it will be "sort of merged" with
the note:
one = c'4
two = d'4
{ <>\glissando $one $two }

(2)
afterGrace expects _two_ musical arguments.
Your code
>     #{
>       \afterGrace
>       $firstNote
>       \glissando
>       \once \override Stem.stencil = ##f
>       \once \override Flag.stencil = ##f
>       \parenthesize $secondNote
>     #}

provides $firstNote as first argument  and \glissando as the second.
(And there is an optional argument for the `fraction´)

You will want to have a first-note-with-starting-glissando as first argument and
a parenthesize-second-note-with-overrides as second. Thus use brackets:

bendDown =
#(define-music-function
   (parser location firstNote secondNote)
   (ly:music? ly:music?)
    #{
      \afterGrace 15/16
      {
        <>\glissando
        $firstNote
      }

      {
        \once \override Stem.stencil = ##f
        \once \override Flag.stencil = ##f
        \parenthesize $secondNote
      }
    #}
  )
\score {
  \new Staff \with { instrumentName = #"Flute" }
  {
    \bendDown g'2 f'4
  }
}

Works here.

HTH,
  Harm



reply via email to

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