lilypond-user
[Top][All Lists]
Advanced

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

Re: substitution function variable name


From: Darren Ng
Subject: Re: substitution function variable name
Date: Mon, 23 Jan 2023 01:22:39 +0800

Thanks. The following works:

  accOne =
  #(define-music-function
      (x        )
      (ly:pitch?)
    #{
      $x 8 $x 8
    #})

My ultimate goal is a function which does the following

  accTwo =
  #(define-music-function
      (x        )
      (ly:pitch?)
    #{
      $x 8             r8
      <($x+4) ($x+7)>8 r8
      ($x-5) 8         r8
      <($x+4) ($x+7)>8 r8
    #})

E.g.

  \accTwo c expands to { c8r8 <eg>8r8  g,8r8 <eg>8r8 }
  \accTwo f expands to { f8r8 <ac'>8r8 c8r8  <ac'>8r8 }

What material should I read so that I'll be able to achieve this?

On Mon, Jan 23, 2023 at 12:36 AM Jean Abou Samra <jean@abou-samra.fr> wrote:
>
>
>
> Le 22/01/2023 à 17:33, Jean Abou Samra a écrit :
> >
> >
> > Le 22/01/2023 à 17:20, Darren Ng a écrit :
> >> Define substitution function accOne() as:
> >>
> >>      accOne =
> >>      #(define-music-function
> >>          (x        )
> >>          (ly:music?)
> >>        #{
> >>          $x8 $x8 $x8 $x8 $x8
> >>        #})
> >>
> >> Call accOne() with:
> >>
> >>      \accOne f
> >>
> >> Expected output is:
> >>
> >>      f8 f8 f8 f8 f8
> >>
> >> However, lilypond reports error as follows:
> >>
> >>      GNU LilyPond 2.24.0 (running Guile 2.2)
> >>      Processing `main.ly'
> >>      Parsing...
> >>      accompanimentfunc.ly:19:6: error: Guile signaled an error for the
> >> expression beginning here
> >>          $
> >>           x8 $x8 $x8 $x8 $x8
> >>      Unbound variable: x8
> >>      accompanimentfunc.ly:19:10: error: Guile signaled an error for the
> >> expression beginning here
> >>          $x8 $
> >>               x8 $x8 $x8 $x8
> >>      Unbound variable: x8
> >>      accompanimentfunc.ly:19:14: error: Guile signaled an error for the
> >> expression beginning here
> >>          $x8 $x8 $
> >>                   x8 $x8 $x8
> >>      Unbound variable: x8
> >>      accompanimentfunc.ly:19:18: error: Guile signaled an error for the
> >> expression beginning here
> >>          $x8 $x8 $x8 $
> >>                       x8 $x8
> >>      Unbound variable: x8
> >>      accompanimentfunc.ly:19:22: error: Guile signaled an error for the
> >> expression beginning here
> >>          $x8 $x8 $x8 $x8 $
> >>                           x8
> >>      Unbound variable: x8
> >>      Interpreting music...
> >>
> >> How to tell lilypond to look for variable "x" and make a 1/8 note out
> >> of it,
> >> instead of looking for variable "x8"?
> >
> >
> >
> > Simply insert a space between "x" and "8".
>
>
> Also, the result will likely still surprise you because you are receiving
> the argument "x" as ly:music?, which means a full note, with its duration
> (implicitly taken from the previous duration if you call it as \accNote f
> rather than \accNote f16 for example), so the "8" parts in the function
> are standalone durations, which inherit the pitch from the previous note,
> and you get something equivalent to
>
>    f4 f8 f4 f8 f4 f8 f4 f8 f4 f8
>
> So better replace ly:music? with ly:pitch?. See also
>
> https://extending-lilypond.readthedocs.io/en/latest/music.html#argument-type-checking
>
> Best,
> Jean
>



reply via email to

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