[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: scheme : type d' arguments pour \transpose
From: |
Nicolas Sceaux |
Subject: |
Re: scheme : type d' arguments pour \transpose |
Date: |
Fri, 30 Nov 2007 23:18:48 +0100 |
Le 30 nov. 07 à 00:50, Gilles THIBAULT a écrit :
Bonjour tout le monde.
Qui pourrait me dire quel type je doit mettre à la place de
(ly:music?) pour que la commande "\transpose c $note" soit acceptée.
Pour le moment, on obtient le message :
"syntax error, unexpected MUSIC_IDENTIFIER, expecting NOTENAME_PITCH
or TONICNAME_PITCH"
Merci
%%%%%%%%
\version "2.11.34"
A = { c2 e g }
accord = #(define-music-function (parser location note) (ly:music?)
#{
\transpose c $note \relative { \A \A }
#})
\accord g,
%%%%%%%%%
Ce n'est pas malheureusement pas possible de faire ça de façon aussi
simple.
Quand tu écris :
\accord g,
LilyPondva évaluer l'expression entre #{ #} en remplaçant le $note
par un identifiant dont la valeur est celle passée en argument à ta
fonction, c'est-à-dire quelque chose d'équivalent à :
tmpVariable = g,
\transpose c \tmpVariable \relative { \A \A }
Or ceci n'est pas une expression LilyPond correcte, le message
d'erreur que tu
obtiens signifie que à la place de l'identifant (MUSIC_IDENTIFIER), le
parser
pensait trouver un nom de note (NOTENAME_PITCH or TONICNAME_PITCH).
Ca, c'est
pour la mauvaise nouvelle.
Mais il y a tout de même une solution. Pour faire ce que tu souhaites,
la
première étape consiste à écrire l'expression que tu veux construire
avec
ta fonction, et voir à quoi elle ressemble en Scheme, en utilisant
\displayMusic:
\displayMusic \transpose g, \relative { \A \A }
Ensuite, il s'agira de faire une fonction qui construit une expression
de ce type,
en remplaçant la partie qui correspond au "g," par l'argument de ta
fonction (la
variable note), et idem pour la variable A.
nicolas