[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: macro pour un motif musical à répéter
From: |
Valentin Villenave |
Subject: |
Re: macro pour un motif musical à répéter |
Date: |
Mon, 4 Feb 2019 23:05:18 +0000 |
On 2/4/19, eric <address@hidden> wrote:
> Je ne sais pas non plus gérer un argument de longueur variable.
> Qui peut m'aider (je suis assez novice ...)
De nos jours, c’est assez facile :
%%%%
toto =
#(define-music-function (parser location music) (ly:music?)
(music-map
(lambda (m)
(let ((p (ly:music-property m 'pitch))
(n (ly:music-deep-copy m)))
(if (not (null? p))
(begin
(ly:music-set-property! n 'pitch
(ly:pitch-transpose p (ly:make-pitch 1 0 0)))
#{
#m \change Staff = "up"
#n \change Staff = "down"
#})
m)))
music))
<<
\new Staff = "up" { s1*2 }
\new Staff = "down" \toto {b4 b b b}
>>
%%%%
Quelques mots d’explication :
- le principe de music-map, c’est d’appliquer la même fonction à tous
les éléments successifs d’une liste (ce que vous entendez par
"argument de longueur variable", si je comprends bien). Il prend deux
arguments : d’abord la fonction, puis la liste (en l’occurrence, la
liste s’appelle "music", à la toute fin… mais on pourrait l’appeler
comme on veut).
- ladite fonction (ou procédure doit s’appliquer à n’importe quel
objet, appelons cet objet "m" (c’est à cela que sert lambda : il
introduit une variable qui servira d’argument à toutes les opérations
qui viennent ensuite).
- cependant il peut y avoir n’importe quoi dans cette succession
d’éléments "m" (par exemple une commande \bar, \clef, \time, \breathe,
que sais-je). On ne veut toucher que à ceux qui ont une propriété
'pitch (ceux qui n’en ont pas vont renvoyer une valeur nulle).
- J’extrais donc la valeur de cette propriété dans une variable "p",
que je teste ensuite. Si elle n’est pas nulle, je vais la transposer
d’une octave (le premier des trois arguments de ly:make-pitch :
octave, note, altération) et l’attribuer à une nouvelle note "n",
copiée depuis "m".
- Si p est nulle toutefois, je vais simplement remettre "m" sans y toucher.
En bonus : cette fonction écrite à la va-vite ne marche pas avec les
accords… mais elle pourrait être adaptée assez facilement.
Cordialement,
V.
- macro pour un motif musical à répéter, eric, 2019/02/04
- Re: macro pour un motif musical à répéter,
Valentin Villenave <=
- Re: macro pour un motif musical à répéter, Jean-Jacques Gerbaud, 2019/02/05
- Re: macro pour un motif musical à répéter, Olivier Miakinen, 2019/02/05
- Re: macro pour un motif musical à répéter, Jean-Jacques Gerbaud, 2019/02/05
- Re: macro pour un motif musical à répéter, Valentin Villenave, 2019/02/05
- Re: macro pour un motif musical à répéter, Olivier Miakinen, 2019/02/05
- Re: macro pour un motif musical à répéter, Jean-Jacques Gerbaud, 2019/02/05