Skip to content

transegr

Constructs a user-definable envelope with extended release segment.

Like transeg, with a final segment that starts at note-off.

Syntax

ares = transegr(ia, idur, itype, ib [, idur2] [, itype] [, ic] ...)
kres = transegr(ia, idur, itype, ib [, idur2] [, itype] [, ic] ...)
ares transegr ia, idur, itype, ib [, idur2] [, itype] [, ic] ...
kres transegr ia, idur, itype, ib [, idur2] [, itype] [, ic] ...

Initialization

ia -- starting value.

ib, ic, etc. -- target value of each segment.

idur -- duration in seconds of the first segment. A zero or negative value skips initialization and preserves a running envelope, including its release.

idur2,... idurx etc. -- duration in seconds of each later segment. The last segment is the release. A zero or negative duration makes a later segment jump to its target.

itype, itype2, etc. -- curve shape. Zero gives a straight line. For a nonzero value, the curve is:

start + (end - start) * (1 - exp(itype*t)) / (1 - exp(itype))

Here, t runs from 0 to 1 over the segment.

Performance

If itype > 0, there is a slowly rising (concave) or slowly decaying (convex) curve, while if itype < 0, the curve is fast rising (convex) or fast decaying (concave). See also GEN16.

At audio rate, durations round to the nearest sample. At control rate, durations truncate to whole control periods. A duration that becomes zero after rounding or truncation makes the segment jump to its target.

The envelope runs through all segments except the last, then holds the value before the release. With only one segment, it holds ia until note-off.

Note-off starts the final segment from the envelope's current value, even if an earlier segment is still running. This happens at the end of a timed note, on a MIDI note-off, on a negative p1 note event, or when turnoff2 requests a release.

transegr extends the note long enough to output the release endpoint. A zero-length release still outputs its target. If another opcode keeps the note alive longer, transegr holds its endpoint without stretching the release.

Examples

Here is an example of the transegr opcode. It uses the file transegr.csd.

Example of the transegr opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac  -+rtmidi=virtual -M0  ;;;realtime audio out and realtime midi in
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o transegr.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

instr 1

icps cpsmidi             
iamp ampmidi .2  
;             st,dur1,typ1,val,dur2,typ2,end                     
kenv transegr 0,  .2,  2,  .5,  1, - 3,   0
asig pluck kenv*iamp, icps, icps, 1, 1   
     outs asig, asig


endin
</CsInstruments>
<CsScore>
f1 0 4096 10 1  ;sine

f0 30   ;runs 30 seconds
e
</CsScore>
</CsoundSynthesizer>

See also

Linear and Exponential Generators

Credits

Author: John ffitch
january 2010

New in Csound version 5.12