splitrig — Divise un signal déclencheur.
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.
imaxtics -- nombre de tics appartenant au motif le plus grand.
ifn -- numéro de la table contenant la structure des données par canal.
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.
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>