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

## if

if — Branchement conditionnel à l'initialisation ou durant l'exécution.

## Description

if...igoto -- branchement conditionnel à l'initialisation, dépendant de la valeur de vérité de l'expression logique ia R ib. Le branchement n'a lieu que si le résultat est vrai.

if...kgoto -- branchement conditionnel durant l'exécution, dépendant de la valeur de vérité de l'expression logique ka R kb. Le branchement n'a lieu que si le résultat est vrai.

if...goto -- combinaison des deux versions ci-dessus. La condition est testée à chaque passage.

if...then -- donne la possibilité de spécifier des blocs conditionnels if/else/endif. Tous les blocs if...then doivent se terminer par une instruction endif. Les instructions elseif et else sont facultatives. On peut utiliser n'importe quel nombre d'instructions elseif. Il ne peut y avoir qu'une seule instruction else et elle doit être la dernière instruction conditionnelle avant l'instruction endif. Des blocs imbriqués de if...then sont permis.

| Note
Notez que si la condition utilise une variable de taux-k (par exemple, « if kval > 0 »), l'instruction if...goto ou if...then sera ignorée lors de la phase d'initialisation. Cela permet une initialisation de l'opcode même si la variable de taux-k a déjà reçu une valeur appropriée par une instruction init antérieure.

## Syntaxe

    if ia R ib igoto label

    if ka R kb kgoto label

    if xa R xb goto label

    if xa R xb then

où label est dans le même bloc d'instrument et n'est pas une expression, et où R est un des opérateurs relationnels (<, =, <=, ==, !=) (et = par commodité, voir aussi Valeurs Conditionnelles).

Si l'on utilise goto ou then à la place de kgoto ou igoto, le comportement est déterminé par le type étant comparé. Si la comparaison utilise des variables de taux-k, kgoto est utilisé et vice-versa.

| Note
Les instructions If/then/goto ne peuvent pas effectuer de comparaisons de type audio. On ne peut pas mettre de variables de type-a dans les expressions de comparaison pour ces opcodes. La raison en est que les variables audio sont des vecteurs qui ne peuvent pas être comparés de la même façon que des scalaires. Si l'on doit comparer des échantillons audio individuellement il faut utiliser kr = 1 ou Comparateurs et Accumulateurs

## Exemples

Voici une exemple de la combinaison if ... igoto. Il utilise le fichier igoto.csd.

Exemple 400. Exemple de la combinaison if ... igoto.

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
    ; Audio out   Audio in
    -odac           -iadc    ;;;RT audio I/O
    ; For Non-realtime ouput leave only the line below:
    ; -o igoto.wav -W ;;; for file output any platform
    </CsOptions>
    <CsInstruments>

    ; Initialize the global variables.
    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Instrument #1.
    instr 1
      ; Get the value of the 4th p-field from the score.
      iparam = p4

      ; If iparam is 1 then play the high note.
      ; If not then play the low note.
      if (iparam == 1) igoto highnote
        igoto lownote

    highnote:
      ifreq = 880
      goto playit

    lownote:
      ifreq = 440
      goto playit

    playit:
      ; Print the values of iparam and ifreq.
      print iparam
      print ifreq

      a1 oscil 10000, ifreq, 1
      out a1
    endin

    </CsInstruments>
    <CsScore>

    ; Table #1: a simple sine wave.
    f 1 0 32768 10 1

    ; p4: 1 = high note, anything else = low note
    ; Play Instrument #1 for one second, a low note.
    i 1 0 1 0
    ; Play a Instrument #1 for one second, a high note.
    i 1 1 1 1
    e

    </CsScore>
    </CsoundSynthesizer>

Sa sortie contiendra des lignes comme celles-ci :

    instr 1:  iparam = 0.000
    instr 1:  ifreq = 440.000
    instr 1:  iparam = 1.000
    instr 1:  ifreq = 880.000

Voici un exemple de la combinaison if ... kgoto. Il utilise le fichier kgoto.csd.

Exemple 401. Exemple de la combinaison if ... kgoto.

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

    ; Initialize the global variables.
    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Instrument #1.
    instr 1
      ; Change kval linearly from 0 to 2 over
      ; the period set by the third p-field.
      kval line 0, p3, 2

      ; If kval is greater than or equal to 1 then play the high note.
      ; If not then play the low note.
      if (kval >= 1) kgoto highnote
        kgoto lownote

    highnote:
      kfreq = 880
      goto playit

    lownote:
      kfreq = 440
      goto playit

    playit:
      ; Print the values of kval and kfreq.
      printks "kval = %f, kfreq = %f\\n", 1, kval, kfreq

      a1 oscil 10000, kfreq, 1
      out a1
    endin

    </CsInstruments>
    <CsScore>

    ; Table #1: a simple sine wave.
    f 1 0 32768 10 1

    ; Play Instrument #1 for two seconds.
    i 1 0 2
    e

    </CsScore>
    </CsoundSynthesizer>

Sa sortie contiendra des lignes comme celles-ci :

    kval = 0.000000, kfreq = 440.000000
    kval = 0.999732, kfreq = 440.000000
    kval = 1.999639, kfreq = 880.000000

## Exemples

Voici un exemple de la combinaison if ... then. Il utilise le fichier ifthen.csd.

Exemple 402. Exemple de la combinaison if ... then.

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

    sr = 44100
    kr = 4410
    ksmps = 10
    nchnls = 1

    ; Instrument #1.
    instr 1
      ; Get the note value from the fourth p-field.
      knote = p4

      ; Does the user want a low note?
      if (knote == 0) then
        kcps = 220
      ; Does the user want a middle note?
      elseif (knote == 1) then
        kcps = 440
      ; Does the user want a high note?
      elseif (knote == 2) then
        kcps = 880
      endif

      ; Create the note.
      kamp init 25000
      ifn = 1
      a1 oscili kamp, kcps, ifn

      out a1
    endin

    </CsInstruments>
    <CsScore>

    ; Table #1, a sine wave.
    f 1 0 16384 10 1

    ; p4: 0=low note, 1=middle note, 2=high note.
    ; Play Instrument #1 for one second, low note.
    i 1 0 1 0
    ; Play Instrument #1 for one second, middle note.
    i 1 1 1 1
    ; Play Instrument #1 for one second, high note.
    i 1 2 1 2
    e

    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

elseif, else, endif, goto, igoto, kgoto, tigoto, timout

## Crédits

Exemples écrits par Kevin Conder.

Note ajoutée par Jim Aikin.

Février 2004. Note ajoutée par Matt Ingalls.

Précédent | Niveau supérieur | Suivant
i | Sommaire | fftinv