chnget — Lit des données depuis le bus logiciel.
Lit des données depuis un canal du bus logiciel entrant nommé. Cela implique la déclaration du canal avec imode=1 (voir aussi chn_k, chn_a et chn_S).
ival chnget Sname
kval chnget Sname
aval chnget Sname
Sval chnget Sname
Sval chngetks Sname
ival[] chngeti Sname[]
kval[] chngetk Sname[]
aval[] chngeta Sname[]
Sval[] chngets Sname[]
Sname -- une chaîne de caractères identifiant le canal du bus logiciel nommé à lire.
Sname[] -- un tableau de canaux du bus logiciel nommés à interroger.
ival -- la valeur de contrôle lue à l'initialisation.
Sval -- la chaîne de caractères lue à l'initialisation.
ival[] -- un tableau de valeurs de contrôle lues à l'initialisation.
Sval{} -- un tableau de chaînes de caractères lues à l'initialisation.
kval -- la valeur de contrôle lue pendant l'exécution.
kval[] -- un tableau de valeurs de contrôle lues pendant l'exécution.
aval -- le signal audio lu pendant l'exécution.
aval[] -- le tableau de vecteurs audio lus pendant l'exécution.
Sval -- la chaîne de caractères lue au taux-k. L'opcode chnget fonctionne au temps-i et durant l'exécution, tandis que chngetks ne fonctionne que pendant l'exécution. Les variables chaîne de caractères ne sont mises à jour que si le canal a changé.
Note | |
---|---|
Bien qu'il soit possible de boucler sur les noms de canaux d'un tableau avec chnget et chnset, l'utilisation de la variante basée sur des tableaux est plus efficace. |
L'exemple montre l'utilisation du bus logiciel comme signal de contrôle asynchrone pour fixer la fréquence de coupure du filtre. On suppose qu'un programme externe utilisant l'API fournit les valeurs.
sr = 44100 kr = 100 ksmps = 1 instr 1 kc chnget "cutoff" a1 oscil p4, p5, 100 a2 lowpass2 a1, kc, 200 out a2 endin
Voici un autre exemple de l'opcode chnget. Il utilise le fichier chnget.csd.
Exemple 137. Exemple de l'opcode chnget.
<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 chnget.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> ;Example by Joachim Heintz sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1; send i-values chnset 1, "sio" chnset -1, "non" endin instr 2; send k-values kfreq randomi 100, 300, 1 chnset kfreq, "cntrfreq" kbw = kfreq/10 chnset kbw, "bandw" endin instr 3; send a-values anois rand .1 chnset anois, "noise" loop: idur random .3, 1.5 timout 0, idur, do reinit loop do: ifreq random 400, 1200 iamp random .1, .3 asig oscils iamp, ifreq, 0 aenv transeg 1, idur, -10, 0 asine = asig * aenv chnset asine, "sine" endin instr 11; receive some chn values and send again ival1 chnget "sio" ival2 chnget "non" print ival1, ival2 kcntfreq chnget "cntrfreq" kbandw chnget "bandw" anoise chnget "noise" afilt reson anoise, kcntfreq, kbandw afilt balance afilt, anoise chnset afilt, "filtered" endin instr 12; mix the two audio signals amix1 chnget "sine" amix2 chnget "filtered" chnmix amix1, "mix" chnmix amix2, "mix" endin instr 20; receive and reverb amix chnget "mix" aL, aR freeverb amix, amix, .8, .5 outs aL, aR endin instr 100; clear chnclear "mix" endin </CsInstruments> <CsScore> i 1 0 20 i 2 0 20 i 3 0 20 i 11 0 20 i 12 0 20 i 20 0 20 i 100 0 20 </CsScore> </CsoundSynthesizer>