splitrig

splitrig — Divise un signal déclencheur.

Description

splitrig divise un signal déclencheur (c-à-d une suite temporelle d'impulsions au taux de contrôle) en plusieurs canaux suivant une structure conçue par l'utilisateur.

Syntaxe

splitrig ktrig, kndx, imaxtics, ifn, kout1 [,kout2,...,koutN]

Initialisation

imaxtics -- nombre de tics appartenant au motif le plus grand.

ifn -- numéro de la table contenant la structure des données par canal.

Exécution

asig -- signal entrant

ktrig -- signal déclencheur

L'opcode splitrig divise un signal déclencheur en plusieurs canaux suivant un ou plusieurs motifs fournis par l'utilisateur. Normalement le signal déclencheur régulier généré par l'opcode metro est utilisé pour être transformé en motif rythmique pouvant déclenché plusieurs mélodies indépendantes ou plusieurs riffs de percussion. Mais on peut aussi partir de signaux de déclenchement non-isochrones. Ceci permet des variations de groove "interprétées" et moins "mécaniques". Les motifs sont en boucle et le cycle est répété chaque nombre_de_tics_du_motif_N.

Le schéma des motifs est défini par l'utilisateur et stocké dans la table ifn dans le format suivant :

        gi1  ftgen 1,0,1024,  -2 \  ; la table est générée avec GEN02 dans ce cas
\                           ;
nombre_de_tics_du_motif_1, \ ;motif 1
   tic1_out1, tic1_out2, ... , tic1_outN,\
   tic2_out1, tic2_out2, ... , tic2_outN,\
   tic3_out1, tic3_out2, ... , tic3_outN,\
   .....
   ticN_out1, ticN_out2, ... , ticN_outN,\
\
nombre_de_tics_du_motif_2, \ ;motif 2
   tic1_out1, tic1_out2, ... , tic1_outN,\
   tic2_out1, tic2_out2, ... , tic2_outN,\
   tic3_out1, tic3_out2, ... , tic3_outN,\
   .....
   ticN_out1, ticN_out2, ... , ticN_outN,\
   .....
\
nombre_de_tics_du_motif_N,\ ;motif N
   tic1_out1, tic1_out2, ... , tic1_outN,\
   tic2_out1, tic2_out2, ... , tic2_outN,\
   tic3_out1, tic3_out2, ... , tic3_outN,\
   .....
   ticN_out1, ticN_out2, ... , ticN_outN,\
      

Ce schéma peut contenir plus d'un motif, chacun avec un nombre différent de lignes. Chaque motif est précédé par une ligne spéciale contenant un seul champ nombre_de_tics_du_motif_N ; ce champ donne le nombre de tics constituant le motif correspondant. Chaque ligne du motif compose un tic. Chaque colonne du motif correspond à un canal, et chaque champ d'une ligne est un nombre qui constitue le valeur sortie par le canal correspondant koutXX (si ce nombre est zéro, le canal de sortie correspondant ne déclenchera rien dans cet argument particulier). Evidemment, chaque ligne doit contenir le même nombre de champs qui doit égaler le nombre de canaux koutXX. Tous les motifs doivent contenir le même nombre de lignes ; ce nombre doit être égal au plus grand des motifs et il est défini par la variable imaxtics. Même si un motif compte moins de tics que le motif le plus grand, il doit contenir le même nombre de lignes. Dans ce cas, certaines de ces lignes, à la fin du motif, ne seront pas utilisées (et peuvent ainsi prendre n'importe quelle valeur, car elle est sans importance).

La variable kndx donne le numéro du motif à jouer, zéro indiquant le premier motif. Chaque fois que la partie entière de kndx change, le compteur de tic est remis à zéro.

Les motifs sont en boucle et le cycle est répété chaque nombre_de_tics_du_motif_N.

exemples 4 - calcule la valeur moyenne de asig dans l'intervalle de temps.

Cet opcode peut être utile dans certaines situations, par exemple pour implémenter un vu-mètre.

Exemples

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

Exemple 996. Exemple de l'opcode splitrig.

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>
-odac -d -m0
</CsOptions>
<CsInstruments>

; By Stefano Cucchi & Menno Knevel - 2020

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

; table with values 
; 4 lines =  4 kout triggers
; 4 rows = number of tics for every pattern (imaxtics)
gi1  ftgen 1, 0, 1024, -2,   ; Table is generated with GEN02
\            ; Every column represent a kout trigger           
4, \       ; define # of rows of numtics of pattern 0 == index 0
\; k1, k2, k3, k4
   2,  3,  4,  5,\                         
   3,  4,  5,  5,\
   4, 10, 10,  3,\
   5,  2, 10,  4,\
\
4, \     ; define # of rows of numtics of pattern 1 == index 1
\; k1, k2, k3, k4
   6, 10,  7,  8,\
   8,  6,  7,  8,\
   8,  6, 10,  8,\
   9,  6, 10,  8

instr 1

ktrig  metro  4  ; general trigger
; initialize out triggers
k1 init 0
k2 init 0
k3 init 0
k4 init 0
kndx = p4    ;choose pattern 0 or 1
imaxtics = 4 ; number of tics
ifn = 1
splitrig ktrig, kndx, imaxtics, ifn, k1, k2, k3, k4
if (p5 == 1) then
   schedkwhen ktrig, 0, 1, k1, 0, .1  ; 1st column
elseif (p5 == 2) then
   schedkwhen ktrig, 0, 1, k2, 0, .1  ; 2nd column
elseif (p5 == 3) then
   schedkwhen ktrig, 0, 1, k3, 0, .1  ; 3rd column
elseif (p5 == 4) then
   schedkwhen ktrig, 0, 1, k4, 0, .1  ; 4th column
endif
print p5
endin

instr 2

prints "instr 2\n"
ares linen  .3, 0.02, p3, .05 ;envelope 
aout  poscil ares, 200
outs aout, aout
endin

instr 3

prints "instr 3\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 300
outs aout, aout
endin

instr 4

prints "instr 4\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 400
outs aout, aout
endin

instr 5

prints "instr 5\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 500
outs aout, aout
endin

instr 6

prints "instr 6\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 1500
outs aout, aout
endin

instr 7

prints "instr 7\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 2000
outs aout, aout
endin

instr 8

prints "instr 8\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 2500
outs aout, aout
endin

instr 9

prints "instr 9\n"
ares linen  .3, 0.02, p3, .05 
aout  poscil ares, 3000
outs aout, aout
endin

instr 10 ; dummy instrument

prints "instr 10\n"
; silence
endin

</CsInstruments>
<CsScore>
s
i 1 0 4 0 1 ; play the 4 columns of pattern 0
i 1 + 4 0 2
i 1 + 4 0 3
i 1 + 4 0 4
s
i 1 0 4 1 1 ; play the 4 colums of pattern 1
i 1 + 4 1 2
i 1 + 4 1 3
i 1 + 4 1 4
e
</CsScore>
</CsoundSynthesizer>


Crédits

Ecrit par Gabriel Maldonado.

Nouveau dans Csound 5 (n'était disponible auparavant que dans CsoundAV).