Bonjour,
J'ai une pièce dont le code est scindé en plusieurs parties (1 partie par mouvement). Chaque mouvement est censé être indépendant, donc aucun ne peut présumer de comment se termine le précédent.
En version "naïve" (sans code particulier), si un mouvement commence dans la même tonalité que le mouvement précédent (ou avec la même métrique), alors les éléments sont répétés explicitement, ce qui n'est pas souhaité, mais pas non plus illogique.
J'ai donc essayé de définir des variables qui contiennent la tonalité courante et la métrique courante, à charge pour chaque mouvement de positionner ces variables pour indiquer leur contexte de fin.
Pour commencer facile, j'ai défini les variables "au plus dur" comme suit:
currentKey = "D-"
currentTimeSignature = "4/4"
Dans la partie Structure du début d'un mouvement, j'ai le code suivant:
#(if #(not eq? currentKey "D-")
#{
\key d \minor
#})
#(if #(not eq? currentTimeSignature "4/4")
#{
\time 4/4
\set Timing.beamExceptions = #'()
\set Timing.beatBase = #1/4
\set Timing.beatStructure = 1,1,1,1
#})
Le comportement que j'ai n'est pas celui attendu:
- Si mon code comporte des
#(if #(not eq? currentTimeSignature "4/4") #{\key \d \minor..., alors la métrique est systématiquement imprimée, quelle que soit la valeur de la variable. - Par contre si j'ai
#(unless #(eq? currentTimeSignature "4/4") #{\key \d \minor...alors la métrique n'est jamais imprimée, quelle que soit la valeur à laquelle j'ai positionnécurrentTimeSignatiure
J'ai essayé de fixer les variables en #(define... au tout début de la pièce, ou par des #(set!... en cours de mouvement, mais le résultat ne change pas.
Si quelqu'un a une suggestion ou une idée pour combiner #if et non-répétition des armures et métriques, je suis preneur. Dans l'attente, je vais manuellement commenter le code Lilypond dans les nouveaux mouvements lorsque je sais (oui, syndrome du démiurge) que ces éléments ne changent pas d'un mouvement à l'autre.
Merci beaucoup, bonne journée à tous.
Emmanuel