linenr
Prev | Opcodes et opérateurs de l'orchestre | Next

## linenr

linenr — L'opcode linen rallongé avec un segment de relâchement.

## Description

linenr -- comme linen sauf que le dernier segment n'est entamé qu'après la détection d'un relâchement de note MIDI. La note est alors rallongée de la durée de la chute.

## Syntaxe

    ares linenr xamp, irise, idec, iatdec

    kres linenr kamp, irise, idec, iatdec

## Initialisation

irise -- durée de l'attaque en secondes. Un valeur nulle ou négative signifie pas d'attaque.

idec -- durée de la chute en secondes. Si idec > idur la chute sera tronquée.

iatdec -- facteur d'atténuation par lequel la dernière valeur de l'entretien diminue exponentiellement pendant la chute. Cette valeur doit être positive et elle est normalement de l'ordre de 0,01. Une valeur trop longue ou excessivement courte peut produire une coupure audible. Les valeurs nulle ou négatives sont interdites.

## Exécution

kamp, xamp -- signal d'amplitude en entrée.

Ce qui rend unique linenr dans Csound c'est qu'il contient un détecteur de note-off et un allongement de la durée de relâchement. Lorqu'il détecte la fin d'un évènement de partition ou un note-off MIDI, il allonge immédiatement la durée d'exécution de l'instrument courant de idec secondes, puis il exécute une chute exponentielle vers le facteur iatdec. S'il y a plusieurs unités dans un instrument, l'allongement est défini par le plus grand idec.

On peut utiliser d'autres enveloppes préfabriquées pour lancer un segment de relâchement à la réception d'un message note off, comme linsegr et expsegr, ou bien l'on peut construire des enveloppes plus complexes au moyen de xtratim et de release. Noter qu'il n'est pas nécessaire d'utiliser xtratim avec linenr, car la durée est allongée automatiquement.

Ces unités “r” peuvent être modifiées également par des évènements MIDI note-off provoqués par une vélocité nulle.

## Exemples

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

Example 422. Exemple de l'opcode linenr.

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       -M0 ;;;RT audio I/O with MIDI in
    </CsOptions>
    <CsInstruments>

    ; Example by Jonathan Murphy and Charles Gran 2007
      sr	    =  44100
      ksmps	    =  10
      nchnls    =  2

            ; new, and important. Make sure that midi note events are only
            ; received by instruments that actually need them.

    	; turn default midi routing off
    	massign		0, 0
    	; route note events on channel 1 to instr 1
    	massign		1, 1

    ; Define your midi controllers
    #define C1 #21#
    #define C2 #22#
    #define C3 #23#

    ; Initialize MIDI controllers
    	    initc7    1, 21, 0.5 		  ;delay send
    	    initc7    1, 22, 0.5		  ;delay: time to zero
    	    initc7    1, 23, 0.5 		  ;delay: rate

      gaosc	    init      0

    ; Define an opcode to "smooth" the MIDI controller signal
        opcode smooth, k, k
      kin       xin
      kport	    linseg    0, 0.0001, 0.01, 1, 0.01
      kin       portk     kin, kport
                xout      kin
        endop

    instr   1
     ; Generate a sine wave at the frequency of the MIDI note that triggered the intrument
      ifqc	    cpsmidi
      iamp	    ampmidi   10000
      aenv	    linenr    iamp, .01, .1, .01 	  ;envelope
      a1	    oscil     aenv, ifqc, 1
    ; All sound goes to the global variable gaosc
      gaosc	    =  gaosc + a1
        endin

        instr     198 ; ECHO
      kcmbsnd   ctrl7     1, 21, 0, 1 		  ;delay send
      ktime	    ctrl7     1, 22, 0.01, 6 		  ;time loop fades out
      kloop	    ctrl7     1, 23, 0.01, 1 		  ;loop speed
    ; Receive MIDI controller values and then smooth them
      kcmbsnd   smooth    kcmbsnd
      ktime	    smooth    ktime
      kloop	    smooth    kloop

      imaxlpt   =  1 				  ;max loop time
    ; Create a variable reverberation (delay) of the gaosc signal
      acomb	    vcomb     gaosc, ktime, kloop, imaxlpt, 1
      aout	    =  (acomb * kcmbsnd) + gaosc * (1 - kcmbsnd)
    	    outs      aout, aout
      gaosc	    =  0
        endin

    </CsInstruments>
    <CsScore>
    f1 0 16384 10 1
    i198 0 10000
    e
    </CsScore>
    </CsoundSynthesizer>

## Voir aussi

linsegr, expsegr, envlpxr, mxadsr, madsr, envlpx, linen, xtratim

Prev | Up | Next
linen | Home | lineto