[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: polymétries et mise en page
From: |
Valentin Villenave |
Subject: |
Re: polymétries et mise en page |
Date: |
Tue, 21 Apr 2020 21:20:37 +0000 |
On 4/21/20, Christian Lalune <address@hidden> wrote:
> Merci pour cette nouvelle solution qui fonctionne parfaitement.
> J’ai encore quelques heures d’études du scheme avant de comprendre
> votre fonction lambda (ctx).
Quelques commentaires :
\consists
%% C’est en fait un engraver en Scheme, même s’il est très minimal.
#(lambda (ctx)
;; Et comme c’est un engraver, il va intervenir à un stade où les
contextes existent déjà (alors que les music-functions ne traitent que
la musique en amont). Je nomme "ctx" le contexte dans lequel il va
intervenir, quel qu’il soit.
`((process-music .
;; Je souhaite intervenir au stade "process-music" ; il existe
différents stades dans le traitement (start-translation-timestep,
process-music, finalize etc.) donc ici c’est juste le nom du stade
souhaité. (Notez la syntaxe de type "alist".) Vous pouvez voir un
exemple dans le regression-test "scheme-engraver.ly".
. ,(lambda (trans)
;; J’ouvre ici une deuxième procédure, sous forme d‘une fonction
lambda, qui devrait s’appliquer à un translator (mais en fait de toute
façon je n’en aurai pas besoin).
(or (not (null?
;; Ceci pourrait aussi s’écrire (if (null? (ly:context-property etc.
(ly:context-property ctx 'whichBar)))
;; Et c’est là tout le problème (et la raison pour laquelle la seule
solution était de passer par un engraver) : 'whichBar est une
context-property (et non une music-property). Elle n’existe qu’au
moment où la gravure de la partition est déjà bien entamée ; en ne
regardant _que_ l’expression musicale (comme avec une music-function)
il aurait été beaucoup plus difficile de savoir pour chaque temps à
quel stade on en est dans la mesure, à plus forte raison si les
chiffres de mesure changent en cours de route, s’il y a des situations
polyphoniques etc.
(ly:context-set-property! ctx 'whichBar "")))
;; Et donc ça tombe bien, puisque c’est précisément dans ce même
contexte que je vais donner une définition à la propriété whichBar, ce
qui correspond exactement à ce que fait la commande \bar d’ordinaire
(vous pouvez voir sa définition dans music-functions-init.ly).
)))
Cordialement,
V. V.