loopseg

loopseg — Génère un signal de contrôle constitué de segments de droite délimités par deux ou plus points spécifiés.

Description

Génère un signal de contrôle constitué de segments de droite délimités par deux ou plus points spécifiés. L'enveloppe entière est parcourue en boucle au taux kfreq. Chaque paramètre peut varier au taux-k.

Syntaxe

ksig loopseg kfreq, ktrig, iphase, kvalue0, ktime0 [, kvalue1] [, ktime1] \
      [, kvalue2] [, ktime2] [...]

Initialisation

iphase -- Une valeur comprise entre 0 et 1 pour indiquer où commence la boucle. Zéro, la valeur la plus usuelle, indique le début du signal.

Exécution

ksig -- Signal de sortie.

kfreq -- Taux de répétition en Hz ou en fraction de Hz.

ktrig -- S'il est non nul, redéclanche l'enveloppe depuis le début (voir l'opcode trigger), avant que le cycle de l'enveloppe ne soit complet.

kvalue0...kvalueN -- Valeurs des points.

ktime0...ktimeN -- Durées entre les points ; exprimées en fraction d'une période (voir ci-dessous). La dernière durée indique une ligne entre la valeur finale et la première valeur.

L'opcode loopseg est semblable à linseg, mais l'enveloppe entière est parcourue en boucle au taux kfreq. Noter que les valeurs temporelles ne sont pas exprimées en secondes mais en fractions d'une période. Concrètement chaque durée est proportionnelle aux autres, et la durée du cycle complet est proportionnelle à la somme de toutes les valeurs de durée.

La somme de toutes les durées est ensuite pondérée en fonction de l'argument kfreq. Par exemple, considérant une enveloppe faite de 3 segments, chaque segment ayant une valeur de durée de 100, leur somme sera 300. Cette valeur représente la durée totale de l'enveloppe, et elle est divisée en 3 parties égales, une partie pour chaque segment.

Concrètement, la durée réelle de l'enveloppe en secondes est déterminée par kfreq. Si l'enveloppe est à nouveau constituée de 3 segments, mais cette fois-ci le premier et le dernier segments ayant une durée de 50, tandis que le segment central a une durée de 100, leur somme sera 200. Ici 200 représente la durée totale des 3 segments, et ainsi le segment central sera deux fois plus long que les autres segments.

Tous les paramètres peuvent varier au taux-k. Si les valeurs de fréquence sont négatives, l'enveloppe est lue à l'envers. ktime0 doit toujours valoir 0, sauf si l'on désire un effet spécial.

Exemples

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

Exemple 532. Exemple de l'opcode loopseg.

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 loopseg.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1
kfreq  init     p4  ; frequency of loop repetition
ifrac  =        p5  ; frequency ratio of restart triggers
ktrig  metro    kfreq * ifrac  ; triggers to restart loop
iphase =        0   ; initial phase
; loop of note values (some glissandi)
;                                    val dur val dur etc...
knote loopseg  kfreq, ktrig, iphase, 40, 1,  40, 0,  43,1,43,0, 49,2,48,0, \
 47,1,47,0, 46,1,46,0, 46,1,47,0, 49,1,49,0, 43,1,43,0, 46,1,46,0, 40,1,39,0    
; loop of filter cutoff values (oct format). This loop, half speed of note loop.
kcfoct loopseg  kfreq*0.5, ktrig, iphase, 11,2,4,0, 12,1,4,0, 13,1,4,0, \
 11.5,3,4,0, 12.5,1,4,0, 13,2,4,0, 12.5,1,4,0
kenv  linseg   0,0.01,1,p3-5.01,1,5,0
ioct  =        int((rnd(0.999)*4)-2) ; random value either -1, 0 or 1
asig  vco2     0.2*kenv,cpsmidinn(knote)*octave(ioct),0 ; sawtooth
asig  moogladder  asig,cpsoct(kcfoct),rnd(0.6)          ; filter sawtooth
aL,aR pan2     asig,rnd(1)  ; random static pan location
      outs     aL, aR
endin

</CsInstruments>
<CsScore>

; 4 layers, each with a different frequency of loop repetition (p4),
;  frequency ratio of restart triggers (p5) and pan position (p6).
i 1  0 30 0.5   [11/19]
i 1  6 30 0.25  [11/13]
i 1 12 30 0.125 [11/16]
i 1 18 30 1     [11/12]
e
</CsScore>
</CsoundSynthesizer>


Voir aussi

lpshold loopxseg

Crédits

Auteur : Gabriel Maldonado

Nouveau dans la Version 4.13