Administrateur

  • Profile picture of echeveste
  • Profile picture of Jean-Louis Giavitto
  • Profile picture of Philippe Cuvillier
  • Profile picture of arshiacont

Antescofo

Groupe Public active 1 day et 21 hours ago

The user group for Antescofo.

curve au sein d'une liste

Auteur 2 Utilisateurs souscrits |
Profile photo of Lorangeverte
Lorangeverte

Bonjour,

je n’arrive à exécuter une curve sur une valeur particulière au sein d’une liste(tab)…

Par exemple, la variable $b, relative à unique receive, compte 22 valeurs, en conséquence de quoi, lorsque j’écris:

curve toto

@action := { monReceive $b} ,
@grain := 0.1
{
$b
{

{ 1.01 0.0 -20.000000 0.020000 0.035000 1.000000 101.000000 1.000000 71.747643 0.000000 0.181000 0.000000 0.000000 0.000000 0.000000 0.000000 0 0.000000 2 1 1.000000 0.000 }
5 { 1.010000 0.000000 -20.000000 0.020000 0.035000 1.000000 101.000000 1.000000 171.747643 0.000000 0.181000 0.000000 0.000000 0.000000 0.000000 0.000000 0 0.000000 2 1 1.000000 0.000 }
8 {1.010000 0.000000 -20.000000 0.020000 0.035000 1.000000 101.000000 1.000000 35.747643 0.000000 0.181000 0.000000 0.000000 0.000000 0.000000 0.000000 0 0.000000 2 1 1.000000 0.000}
}
}

j’obtiens ce message d’erreur en retour:

Bad curve : the number of values (22) do not corresponds to the number of variables (1)
Curve: restrict curve to the 1 first variables: $b1

Le but étant donc de réaliser une curve sur une seule valeur au sein d’une liste – en l’occurence, dans l’exemple, celle qui est en gras (et sans avoir avoir à déclarer si possible, toujours relativement à l’exemple, 22 variables ou bien 22 variables relatives à 22 receive…)

Merci d’avance de votre aide!

A bientôt,

Lorangeverte

Novembre 7, 2016 à 00:33 #19550
Jean-Louis Giavitto
Jean-Louis Giavitto

Bonjour Lorangeverte.

La syntaxe que vous utilisez dans votre exemple est celle qui permet d’échantilloner plusieurs courbes à l’aide de plusieurs variables (une variable par courbe, ce qui explique le message d’erreur).

Je ne suis pas sur de comprendre votre objectif. J’imagine deux possibilités:

1) S’il s’agit d’itérer sur une seule courbe vectorielle (de dimension 22) afin d’envoyer à monReceive 22 valeurs en même temps, il faut spécifier un vecteur pour les breakpoints, ce qui s’écrit :

curve toto
@action := { monReceive $b} ,
@grain := 0.1
{
   $b  {
           { TAB[1.01, 0.0, -20.000000, 0.020000, 0.035000, 1.000000, 101.000000, 1.000000, 71.747643, 0.000000, 0.181000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0, 0.000000, 2, 1, 1.000000, 0.000] }
         5 { TAB[1.010000, 0.000000, -20.000000, 0.020000, 0.035000, 1.000000, 101.000000, 1.000000, 171.747643, 0.000000, 0.181000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0, 0.000000, 2, 1, 1.000000, 0.000] }
         8 { TAB[1.010000, 0.000000, -20.000000, 0.020000, 0.035000, 1.000000, 101.000000, 1.000000, 35.747643, 0.000000, 0.181000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0, 0.000000, 2, 1, 1.000000, 0.000] }
       }
}

avec cette forme, la variable $b reoit un échantillon de la courbe (à 22 dimension) et la construction curve envoit un message

     monReceive 1.01 0.0 -20.0 0.02 0.035 1.0 101.0 1.0 75.7476 0.0, 0.181 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 1.0 1.0 0.0]

2) S’il s’agit d’itérer sur une seule courbe scalaire (de dimension 1) dont les breakpoints sont définit par (disons) les 9ème élément de tableau, il suffit de donner la valeur des breakpoints sous la forme d’un scalaire (plutôt qu’un tableau). Par exemple, si on suppose que les éléments sont dans les tableaux $t1, $t2, $t3:

$t1 := TAB[1.01, 0.0, -20.000000, 0.020000, 0.035000, 1.000000, 101.000000, 1.000000, 71.747643, 0.000000, 0.181000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0, 0.000000, 2, 1, 1.000000, 0.000]
$t2 := TAB[1.010000, 0.000000, -20.000000, 0.020000, 0.035000, 1.000000, 101.000000, 1.000000, 171.747643, 0.000000, 0.181000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0, 0.000000, 2, 1, 1.000000, 0.000]
$t3 := TAB[1.010000, 0.000000, -20.000000, 0.020000, 0.035000, 1.000000, 101.000000, 1.000000, 35.747643, 0.000000, 0.181000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0, 0.000000, 2, 1, 1.000000, 0.000]

curve toto
@action := { monReceive $b} ,
@grain := 0.1
{
   $b  {
           { ($t1[8]) }
         5 { ($t2[8]) }
         8 { ($t3[8]) }
       }
}

Les messages envoyés sont alors de la forme

  monReceive 71.7476
  monReceive 73.7476
  monReceive 75.7476
  monReceive 77.7476

Remarquez que les données sont sous la forme de tableau (entre des crochets et les éléments séparés par des virgules). L’expression qui permet d’accéder à un élément du tableau est entre parenthèse (dans la construction curve, les expressions de breakpoints plus compliquées qu’une constante ou une variable, doivent être entre parenthèses). Les éléments sont numérotés à partir de 0, le 9ème élément a donc pour index 8.

Si vous connaissez au moment où vous écrivez la partition les valeurs entre lesquelles vous voulez échantillonnez, vous pouvez bien sur les spécifier directement:

curve toto
@action := { monReceive $b} ,
@grain := 0.1
{
   $b  {
           {  71.747643 }
         5 { 171.747643 }
         8 {  35.747643 }
       }
}

Notez bien que le fragment
{ 1.01 0.0 -20.000000 0.020000 0.035000 1.000000 101.000000 1.000000 71.747643 0.000000 0.181000 0.000000 0.000000 0.000000 0.000000 0.000000 0 0.000000 2 1 1.000000 0.000 }
ne correspond à aucune construction Antescofo.

Vous trouverez des exemples de curve dans le chapitre http://support.ircam.fr/docs/Antescofo/manuals/Reference/compound_curve/

Novembre 7, 2016 à 01:23 #19551
Profile photo of Lorangeverte
Lorangeverte

Bonjour Jean-Louis,

je vous remercie vivement pour votre réponse.

Les deux méthodes que vous m’avez proposées (et ce même dans le cadre d’une syntaxe simplifiée de curve) fonctionnent à merveille et, dans l’exemple que je vous ai donné, la seconde est beaucoup plus appropriée à mon objectif (pour vous reprendre en substance, “itération sur une seule courbe scalaire dont les breakpoint sont définis par un élément du tableau”).

Très bonne journée, et à bientôt,

Lorangeverte

Novembre 9, 2016 à 09:28 #19627

Vous devez être connecté pour répondre à ce sujet.

Log in now