splitrig
Précédent | Opcodes et opérateurs de l'orchestre | Suivant

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

Précédent | Niveau supérieur | Suivant
spf | Sommaire | sprintf