chnget

chnget — Lit des données depuis le bus logiciel.

Description

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).

Syntaxe

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[]

Initialisation

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.

Exécution

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] 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.

Exemples

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>


Crédits

Auteur : Istvan Varga
2005
Opcodes de canaux basés sur des tableaux ajoutés dans la version 6.14 - Rory Walsh