< Back to IRCAM Forum

Curve simultanées

Bonjour à tous,

je me confronte à un petit problème lorsque j’essaie de produire plusieurs curve simultanément. Cela doit certainement venir d’une mauvaise syntaxe que j’emploie…

Tout d’abord, lorsque j’écris par exemple:

curve @command { i6_curve c Aa6.04 } 2, 6.2 40s
curve @command { i6_curve c Aa6.05 } 1, 8.2 40s
curve @command { i6_curve c Aa6.06 } 1, 1.2 40s

Seul le dernier curve (le troisième donc) est réalisé.

Me suis dis-je que cela pouvait provenir du receive unique, j’ai donc tenté d’écrire:

curve @command { i6_curve1 c Aa6.04 } 2, 6.2 40s
curve @command { i6_curve2 c Aa6.05 } 1, 8.2 40s
curve @command { i6_curve3 c Aa6.06 } 1, 1.2 40s

Soit trois receive différents, si je ne m’abuse…
Et bizarrement malgré ces trois receive différents c’est uniquement sur le dernier, i6_curve3, que le curve est correctement réalisé (les deux autres affichent seulement le message adressé au receive et le point de départ du curve désiré: “c Aa6.04 2” pour le premier receive et “c Aa6.05 1” pour le second)…

Chose plus qu’étonnante, tout marche à merveille en revanche si j’écris des noms de receive “incohérents” (pour ne pas dire bidon), si j’écris:

curve @command { i6_curve c Aa6.04 } 2, 6.2 40s
curve @command { i6toto c Aa6.05 } 1, 8.2 40s
curve @command { i6LOL c Aa6.06 } 1, 1.2 40s

Bien, les trois curve s’exécutent parfaitement et simultanément.

Je dois faire une erreur de syntaxe à l’utilisation de @command, mais laquelle…

Si vous avez une solution… Merci!

En tous cas merci d’avance de votre aide et de votre attention.

Bien à vous tous,

Lorangeverte.

Bonjour Lorangeverte.

La forme simplifiée de la curve est identifiée par le nom du receveur utilisé. Malheureusement, dans le cas d’un message spécifié par @command,il est difficile de déterminer le receveur du message (ce pourrait être le résultat d’un calcul complexe) et on se fie uniquement à la tête du message, ici i6_curve. On ne prend pas en compte les arguments qui diffèrent (Aa6.04, Aa6.05, et Aa6.06).

Une curve simplifié commence par tuer les éventuelles curves de même identificateur. C’est pourquoi le premier exemple ne lance en réalité qu’une seule curve. On peut voir le calcul exact qui est effectué en envoyant un message printfwd à antescofo~: la partition est affichée avec certaines expansions, en particulier les curves simplifiées sont traduites dans la syntaxe générale.

Utiliser des receveurs différents permettra de lancer les trois curves mais enverra des messages à des receveurs différents :slight_smile:

Cela devrait fonctionner mais une erreur perturbe parfois le calcul du receveur du message dans un @command ce qui explique que cela fonctionne dans un cas et pas dans l’autre. Ce bug est à présent corrigé. N’hésitez pas à me contacter par email pour obtenir un nouvel objet (mais la nouvelle version de antescofo~ est en cours de finalisation et sera disponible dans un ou deux mois directement sur le forum).

Une autre approche est d’utiliser une curve dans sa forme complète afin de spécifier les envois de messages via l’attribut @action. Le premier exemple devient

Curve   
  @Grain := 0.03 s,   
  @Action := {  
       i6_curve c Aa6.04 $x  
       i6_curve c Aa6.05 $y  
       i6_curve c Aa6.06 $z  
  }  
{  
     $x { { 2 }  40 s { 6.2 } }  
     $y { { 1 }  40 s { 8.2 } }  
     $z { { 1 }  40 s { 1.2 } }  
}

(où les variables $x, $y, $z ne sont pas utilisées par ailleurs) qui génèrent les messages

  
6_curve c Aa6.04 2.0  
i6_curve c Aa6.05 1.0  
i6_curve c Aa6.06 1.0  
i6_curve c Aa6.04 2.00315  
i6_curve c Aa6.05 1.0054  
i6_curve c Aa6.06 1.00015  
i6_curve c Aa6.04 2.0063  
i6_curve c Aa6.05 1.0108  
i6_curve c Aa6.06 1.0003  

; ...  

i6_curve c Aa6.04 6.19895  
i6_curve c Aa6.05 8.1982  
i6_curve c Aa6.06 1.19995  
i6_curve c Aa6.04 6.2  
i6_curve c Aa6.05 8.2  
i6_curve c Aa6.06 1.2