Bonjour Lorangeverte.
Non, il n’est pas possible d’utiliser une expression dont la valeur ne serait connue qu’à l’exécution. La machine d’écoute a besoin de connaitre la durée de l’événement musical, à l’avance. Mais il y a peut-être des solutions suivant l’objectif recherché.
On peut ne pas spécifier de durée en faisant de la note un point d’orgue (on indique alors une durée de 0
). Cela indique à la machine d’écoute de ne pas tenir compte d’une information de durée pour cet événement.
L’information de durée d’un événement musicale est utilisé par la machine d’écoute comme une indication : c’est la durée qu’on attend du musicien (modulo le tempo). Mais le musicien joue de toute manière comme il le souhaite. Indiquer une durée très différente de l’interprétation rend la tâche un peu plus difficile à la machine d’écoute, et peut perturber l’inférence du tempo et la synchronisation des actions. Pour l’inférence du tempo, on peut le suspendre temporairement. Pour la synchronisation des actions, il n’y aura pas d’effet sur les stratégies de type loose, mais peut être perceptible sur une stratégie tight.
Si la durée de la note doit être adaptée en fonction d’une information qui est connue au moment du chargement de la partition, alors on peut utiliser une macro (les macros effectuent des substitution textuelle au moment du chargement de la partition) :
@macro_def @tata { 1 }
$toto := 1
NOTE 60 @tata A1
receive1 bang
$toto
receive1 bang
$toto/2
receive1 bang
mais on ne peut changer la valeur de @tata
au cours de la partition ou de l’exécution.
Si l’objectif est de réaliser une partition “ouverte”, ou le futur dépend de décisions passées, et si le nombre de choix reste raisonnable, alors on peut utiliser des @jump
pour se brancher sur une suite différente (où la note a la bonne durée) : open-score-and-dynamic-jumps