pycall — Invoque l'objet Python appelable spécifié au taux-k ou au taux-i (suffixe i), en lui passant les arguments donnés. L'appel est exécuté dans l'environnement global et le résultat (la valeur retournée) est copié dans les variables de Csound spécifiées en sortie.
pycall "callable", karg1, ...
kresult pycall1 "callable", karg1, ...
kresult1, kresult2 pycall2 "callable", karg1, ...
kr1, kr2, kr3 pycall3 "callable", karg1, ...
kr1, kr2, kr3, kr4 pycall4 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5 pycall5 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6 pycall6 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7 pycall7 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 pycall8 "callable", karg1, ...
pycallt ktrigger, "callable", karg1, ...
kresult pycall1t ktrigger, "callable", karg1, ...
kresult1, kresult2 pycall2t ktrigger, "callable", karg1, ...
kr1, kr2, kr3 pycall3t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4 pycall4t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5 pycall5t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6 pycall6t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7 pycall7t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 pycall8t ktrigger, "callable", karg1, ...
pycalli "callable", karg1, ...
iresult pycall1i "callable", iarg1, ...
iresult1, iresult2 pycall2i "callable", iarg1, ...
ir1, ir2, ir3 pycall3i "callable", iarg1, ...
ir1, ir2, ir3, ir4 pycall4i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5 pycall5i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5, ir6 pycall6i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5, ir6, ir7 pycall7i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5, ir6, ir7, ir8 pycall8i "callable", iarg1, ...
pycalln "callable", nresults, kresult1, ..., kresultn, karg1, ...
pycallni "callable", nresults, iresult1, ..., iresultn, iarg1, ...
pylcall "callable", karg1, ...
kresult pylcall1 "callable", karg1, ...
kresult1, kresult2 pylcall2 "callable", karg1, ...
kr1, kr2, kr3 pylcall3 "callable", karg1, ...
kr1, kr2, kr3, kr4 pylcall4 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5 pylcall5 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6 pylcall6 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7 pylcall7 "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 pylcall8 "callable", karg1, ...
pylcallt ktrigger, "callable", karg1, ...
kresult pylcall1t ktrigger, "callable", karg1, ...
kresult1, kresult2 pylcall2t ktrigger, "callable", karg1, ...
kr1, kr2, kr3 pylcall3t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4 pylcall4t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5 pylcall5t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6 pylcall6t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7 pylcall7t ktrigger, "callable", karg1, ...
kr1, kr2, kr3, kr4, kr5, kr6, kr7, kr8 pylcall8t ktrigger, "callable", karg1, ...
pylcalli "callable", karg1, ...
iresult pylcall1i "callable", iarg1, ...
iresult1, iresult2 pylcall2i "callable", iarg1, ...
ir1, ir2, ir3 pylcall3i "callable", iarg1, ...
ir1, ir2, ir3, ir4 pylcall4i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5 pylcall5i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5, ir6 pylcall6i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5, ir6, ir7 pylcall7i "callable", iarg1, ...
ir1, ir2, ir3, ir4, ir5, ir6, ir7, ir8 pylcall8i "callable", iarg1, ...
pylcalln "callable", nresults, kresult1, ..., kresultn, karg1, ...
pylcallni "callable", nresults, iresult1, ..., iresultn, iarg1, ...
Opcode du greffon py. Ce greffon se trouve dans le répertoire des greffons et il doit être installé séparément. Le répertoire des greffons est ici : https://github.com/csound/plugins
Cette famille d'opcodes appelle l'objet Python appelable spécifié au taux-k ou au taux-i (suffixe i), en lui passant les arguments donnés. L'appel est exécuté dans l'environnement global et le résultat (la valeur retournée) est copié dans les variables de Csound spécifiées en sortie.
Ils passent n'importe quel nombre de paramètres qui sont transformés en nombres en virgule flottante dans l'interpréteur Python.
Les opcodes pycall/pycalli, pycall1/pycall1i ... pycall8/pycall8i permettent d'avoir de 0 à 8 résultats en fonction de leur préfixe numérique (0 est omis).
Les opcodes pycalln/pycallni peuvent avoir n'importe quel nombre de résultats : le nom de l'objet appelable est suivi du nombre d'arguments en sortie, puis viennent la liste des variables de sortie de Csound et la liste des paramètres à transmettre.
La valeur retournée par l'objet appelable doit être None
pour pycall ou pycalli, un nombre
en virgule flottante pour pycall1i ou
pycall1i et un tuple (de taille appropriée) de nombres
en virgule flottante pour les opcodes
pycall2/pycall2i ...
pycall8/pycall8i et
pycalln/pycallni.
Exemple 860. Appel d'une fonction C ou Python
En supposant qu'au préalable nous avons défini ou importé une fonction
nommée get_number_from_pool
comme ceci :
from random import random, choice # un ensemble de 100 nombres pool = [i ** 1.3 for i in range(100)] def get_number_from_pool(n, p): # substituer un nouveau nombre à un ancien nombre ? if random() < p: i = choice(range(len(pool))) pool[i] = n # retourner un nombre pris aléatoirement dans l'ensemble return choice(pool)
le code d'orchestre suivant
k2 pycall1 "get_number_from_pool", k1, p6
donnera à k2 une valeur extraite aléatoirement d'un ensemble de nombres évoluant dans le temps. On peut passer de nouveaux éléments à l'ensemble et contrôler le taux de changement depuis l'orchestre.
Exemple 861. Appel d'un objet fonctionnel
Une implémentation plus générique de l'exemple précédent utilise un objet fonctionnel simple :
from random import random, choice class GetNumberFromPool: def __init__(self, e, begin=0, end=100, step=1): self.pool = [i ** e for i in range(begin, end, step)] def __call__(self, n, p): # substituer un nouveau nombre à un ancien nombre ? if random() < p: i = choice(range(len(pool))) pool[i] = n # retourner un nombre pris aléatoirement dans l'ensemble return choice(pool) get_number_from_pool1 = GetNumberFromPool(1.3) get_number_from_pool2 = GetNumberFromPool(1.5, 50, 250, 2)
Alors, le code d'orchestre suivant :
k2 pycall1 "get_number_from_pool1", k1, p6 k4 pycall1 "get_number_from_pool2", k3, p7
donnera à k2 et à k4 des valeurs prises aléatoirement dans l'ensemble de nombres évoluant dans le temps. On peut passer de nouveaux éléments à l'ensemble (ici k1 et k3 et contrôler le taux de changement (ici p6 et p7) depuis l'orchestre.
Comme on peut le voir, il est possible de particulariser l'initialisation de l'ensemble ou de créer plusieurs ensembles.