Syntaxe fonctionnelle dans Csound6

Csound6 a introduit une nouvelle syntaxe alternative dans le code de l'orchestre. C'est à l'origine une caractéristique expérimentale qui a certaines limitations comme expliqué ci-dessous. Elle permettra aussi l'introduction de certaines caractéristiques du language sans compatibilité ascendante.

Vue d'ensemble

Le principal aspect de la nouvelle syntaxe est que certains opcodes peuvent être appelés en tant que fonctions en ligne dans le code de l'orchestre. La forme générale en est l'expression:


   var* = op(exprlist*)
  

où * indique une option, var est une variable unique d'un des types de Csound6 et exprlist est une liste d'expressions séparées par des virgules (ou une expression unique ou une variable). On peut placer ces expressions n'importe où dans un instrument ou dans un bloc d'opcodes. Les opérations d'initialisation peuvent également être placées hors des blocs d'instrument. La syntaxe fonctionnelle peut être mélangée avec du code de Csound standard.

Voici un exemple de ces expressions :



   a1 = oscil(p4,p5)
   out(vco2(p4*linen(1, 0.1, p3, 0.1), p5)
   outs(oscili(in(), p5), in())

  

Restrictions

La principale restriction est que seuls les opcodes à sortie unique (ou sans sortie) sont autorisés. De plus, l'analyse des opcodes à plusieurs sorties facultatives échouera sous cette forme. On peut contourner cela en les incluant dans des opcodes définis par l'utilisateur ou juste en mélangeant la syntaxe de Csound standard avec ce nouveau style.

Pour résoudre les ambiguités d'opcode, nous avons introduit les annotations de type sous la forme op:type(exprlist). Par exemple le code :


 
   a1 = oscili(oscili:k(p4,p5), 440)

  

choisit un opcode au taux de contrôle pour moduler l'amplitude de la porteuse audio, au lieu d'un opcode au taux audio. Dans certains cas, l'annotation de type est nécessaire si les arguments d'entrée ne permettent pas de déterminer le type correct d'opcode à appliquer.