stack

stack — Initialise la pile. Obsolète.

Description

Opcode du greffon stackops.

Initialise et fixe la taille de la pile globale.

Syntaxe

stack  iStackSize

Initialisation

iStackSize -- taille de la pile en octets.

Exécution

Csound implémente une pile globale unique. L'initialisation de la pile par l'opcode stack n'est pas requise - elle est facultative, et si elle n'a pas eu lieu, la première utilisation de push ou de push_f créera automatiquement une pile de 32768 octets. Sinon, stack est normalement appelé depuis l'en-tête de l'orchestre et prend un paramètre de taille en octets (il y a une limite supérieure d'environ 16 MO). Une fois fixée, la taille de la pile reste constante et ne peut pas être modifiée durant l'exécution.

La pile globale fonctionne en mode dernier entré, premier sorti : après plusieurs appels push_f, il faut utiliser pop_f dans l'ordre inverse.

Chaque opération push ou pop peut traiter un "paquet" de variables. Lorsque l'on utilise pop, le nombre, le type et l'ordre des éléments doivent être les mêmes que ceux utilisés par le push correspondant. Ainsi après un "push Sfoo, ibar", il faut un appel comme "Sbar, ifoo pop", et pas, par exemple deux instructions "pop" séparées.

Les opcodes push et pop acceptent des variables de n'importe quel type (taux-i, -k, -a et chaînes de caractères). Les variables de type 'a' et 'k' ne sont passées que pendant l'exécution, tandis que celles de type 'i' et 'S' ne sont passées que pendant l'initialisation.

push/pop pour les types a, k, i et S copient les données par valeur. Au contraire, push_f ne pousse qu'une référence du f-signal et le pop_f correspondant copiera directement depuis la variable originale dans le signal de sortie. Pour cette raison, il n'est pas recommandé de changer le f-signal source de push_f avant l'appel à pop_f. De même, si l'instance d'instrument possédant la variable passée à push_f est désactivée avant que pop_f ne soit appelé, il peut en résulter un comportement indéfini.

Toutes les erreurs de pile (tentative de pousser des données alors qu'il n'y a plus d'espace ou d'extraire des données d'une pile vide, nombre ou types d'arguments inconsistants, etc) sont fatales et terminent l'exécution.

Exemples

Voici un exemple de l'opcode stack. Il utilise le fichier stack.csd.

Exemple 1339. Exemple de l'opcode stack.

Voir les sections Audio en Temps Réel et Options de la Ligne de Commande pour plus d'information sur l'utilisation des options de la ligne de commande.

<CsoundSynthesizer> 
<CsOptions>
; Select audio/midi flags here according to platform
-odac   ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o stack.wav -W ;;; for file output any platform
</CsOptions> 
<CsInstruments> 

sr = 44100 
ksmps = 32 
0dbfs  = 1 
nchnls = 2

stack 100000 

instr 1 

a1	oscils 0.7, 220, 0 
k1	line 0, p3, 1 
        push "blah", 123.45, a1, k1 
        push rnd(k1) 

k_rnd	pop 
S01, i01, a01, k01 pop 
        printf_i "S01 = '%s', i01 = %g\n", 1, S01, i01 
ktrig	metro 5.0 
        printf "k01 = %.3f, k_rnd = %.3f\n", ktrig, k01, k_rnd 
        outs a01, a01 

endin 
</CsInstruments> 
<CsScore> 

i 1 0 5 
e 
</CsScore> 
</CsoundSynthesizer> 


Voir aussi

pop, push, pop_f and push_f.

L'utilisation de cet opcode relève un peu du bricolage comme on peut le lire ici : http://csound.1045644.n5.nabble.com/passing-a-string-to-a-UDO-td1099284.html.

Crédits

Par Istvan Varga.

2006

Obsolète depuis la version 6.04.