Instruction {
Prev | Instructions de partition et routines GEN | Next

## Instruction {

{ — Commence une boucle imbriquable, sans section.

## Description

On peut utiliser les instructions { et } pour répéter un groupe d'instructions de partition. Ces boucles ne constituent pas des sections de partition indépendantes et peuvent ainsi répéter des évènements dans la même section. Plusieurs boucles peuvent se chevaucher dans le temps ou être imbriquées.

## Syntaxe

    { p1 p2

## Initialisation

p1 -- Nombre de répétitions de la boucle.

p2 -- Un nom de macro qui est automatiquement défini au début de la boucle et dont la valeur est incrémentée à chaque répétition (facultatif). La valeur initiale est zéro et la valeur finale est (p1 - 1).

## Exécution

L'instruction { est utilisée conjointement avec l'instruction } pour définir des groupes d'évènements de partition qui se répètent. Une boucle de partition commence par l'instruction { qui définit le nombre de répétitions et un nom de macro unique qui contiendra le compteur de boucle. Le corps d'une boucle peut contenir n'importe quel nombre d'évènements (y compris des sauts de section) et il se termine par une instruction } ayant sa propre ligne. L'instruction } ne prend pas de paramètre.

Le terme "boucle" n'implique aucune sorte de succession temporelle pour les itérations de la boucle. Autrement dit, les valeurs p2 des évènements à l'intérieur de la boucle ne sont pas incrémentées automatiquement de la longueur de la boucle à chaque répétition. C'est un avantage car cela permet de définir facilement des groupes d'évènements simultanés. La macro de boucle peut être utilisée avec des expressions de partition pour incrémenter les dates de début d'évènements ou pour faire varier les évènements de toute autre manière désirée à chaque répétition. Noter que à la différence de l'instruction r, la valeur de la macro au premier passage dans la boucle est zéro (0), pas un (1). Ainsi la valeur finale est inférieure d'une unité au nombre de répétitions.

Les boucles de partition sont un outil très puissant. Bien que semblables à l'outil de répétition de section (l'instruction r), leur principal avantage est que les évènements de partition dans les itérations successives de la boucle ne sont pas séparés par une fin de section. Ainsi, il est possible de créer plusieurs boucles qui se chevauchent dans le temps. Les boucles peuvent aussi être imbriquées jusqu'à une profondeur de 39 niveaux.

| Avertissement
En raison de sérieux problèmes d'interaction avec l'expension de macro, les boucles doivent commencer et se terminer dans le même fichier, et pas à l'intérieur d'une macro.

## Exemples

Voici quelques exemples des instructions { et }.

Example 1092. Répétition sequentielle d'une phrase de trois notes, quatre fois.

    { 4 CNT

    i1  [0.00 + 0.75 * $CNT.]   0.2   220
    i1  [0.25 + 0.75 * $CNT.]   .     440
    i1  [0.50 + 0.75 * $CNT.]   .     880

    }

interprété comme

    i1  0.00   0.2   220
    i1  0.25   .     440
    i1  0.50   .     880

    i1  0.75   0.2   220
    i1  1.00   .     440
    i1  1.25   .     880

    i1  1.50   0.2   220
    i1  1.75   .     440
    i1  2.00   .     880

    i1  2.25   0.2   220
    i1  2.50   .     440
    i1  2.75   .     880

Example 1093. Création d'un groupe d'harmoniques simultanés.

Dans cet exemple, p4 contient la fréquence de la note.

    { 8 PARTIAL
    i1  0  1   [100 * ($PARTIAL. + 1)]
    }

interprété comme

    i1  0  1   100
    i1  0  1   200
    i1  0  1   300
    i1  0  1   400
    i1  0  1   500
    i1  0  1   600
    i1  0  1   700
    i1  0  1   800

Voici un exemple complet des instructions { et }. Il utilise le fichier leftbrace.csd.

Example 1094. Un exemple de boucles imbriquées pour créer plusieurs clusters inharmoniques de sinus.

    <CsoundSynthesizer>
    <CsOptions>
    ; Select audio/midi flags here according to platform
    ; Audio out   Audio in
    -odac           -iadc    ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o abs.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>
    nchnls = 2

    gaReverbSend init 0

    ; a simple sine wave partial
    instr 1
        idur   =       p3
        iamp   =       p4
        ifreq  =       p5
        aenv   linseg  0.0, 0.1*idur, iamp, 0.6*idur, iamp, 0.3*idur, 0.0
        aosc   oscili  aenv, ifreq, 1
               vincr   gaReverbSend, aosc
    endin

    ; global reverb instrument
    instr 2
        al, ar reverbsc gaReverbSend, gaReverbSend, 0.85, 12000
               outs     gaReverbSend+al, gaReverbSend+ar
               clear    gaReverbSend
    endin

    </CsInstruments>
    <CsScore>
    f1 0 4096 10 1

    { 4 CNT
      { 8 PARTIAL
          ;   start time     duration            amplitude          frequency

          i1  [0.5 * $CNT.]  [1 + ($CNT * 0.2)]  [500 + (~ * 200)]  [800 + (200 * $CNT.) + ($PARTIAL. * 20)]
      }
    }

    i2 0 6
    e

    </CsScore>
    </CsoundSynthesizer>

## Crédits

Auteur : Gabriel Maldonado

Nouveau dans la version 3.52 (?) de Csound. (Fixé dans la version 5.08).

Prev | Up | Next
Instruction y (ou instruction graine) | Home | Instruction }