lilypond-user-fr
[Top][All Lists]
Advanced

[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





reply via email to

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