< Back to IRCAM Forum

$variable et delay, note, event, etc.

Bonjour tout le monde,

n’arrivant pas à trouver de réponse ou de solution dans la documentation voici une petite question toute bête.

Est-il possible de substituer le temps écrit dans une note ou bien dans un event par une variable et mieux encore par une expression?
En effet ce qui ne semble poser aucun problème pour l’écriture du temps de delay m’offre une erreur syntaxique quand il s’agit de note ou bien d’event:

=== > OK
$toto := 1
NOTE 60 3 A1
receive1 bang
$toto
receive1 bang
$toto/2
receive1 bang

=== > pas OK
$tata := 3
$toto := 1
NOTE 60 $tata A1
receive1 bang
$toto
receive1 bang
$toto/2
receive1 bang

Merci d’avance de votre réponse!

Lorangeverte

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

Bonjour Jean-Louis,

merci pour votre réponse et toutes ces informations très utiles.
Tout ce qui concerne @jump m’intéresse de près mais dans un autre contexte. Dans le cas qui m’a poussé à poster, une simple macro semble suffisante.

A bientôt