expsegr — Trace a series of exponential segments between specified points including a release segment.


Trace a series of exponential segments between specified points including a release segment.


ares expsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz
kres expsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz


ia -- starting value. Zero is illegal for exponentials.

ib, ic, etc. -- value after dur1 seconds, etc. For exponentials, must be non-zero and must agree in sign with ia.

idur1 -- duration in seconds of first segment. A zero or negative value will cause all initialization to be skipped.

idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative value will terminate the initialization process with the preceding point, permitting the last-defined line or curve to be continued indefinitely in performance. The default is zero.

irel, iz -- duration in seconds and final value of a note releasing segment.


These units generate control or audio signals whose values can pass through 2 or more specified points. The sum of dur values may or may not equal the instrument's performance time: a shorter performance will truncate the specified pattern, while a longer one will cause the last-defined segment to continue on in the same direction.

expsegr is amongst the Csound r units that contain a note-off sensor and release time extender. When each senses an event termination or MIDI noteoff, it immediately extends the performance time of the current instrument by irel seconds, and sets out to reach the value iz by the end of that period (no matter which segment the unit is in). r units can also be modified by MIDI noteoff velocities. For two or more extenders in an instrument, extension is by the greatest period.

You can use other pre-made envelopes which start ao release segment upon receiving a note off message, like linsegr and madsr, or you can construct more complex envelopes using xtratim and release. Note that you do not need to use xtratim if you are using expsegr, since the time is extended automatically.


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

Example 288. Example of the expsegr opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

; 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 expsegr.wav -W ;;; for file output any platform

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

instr 1

icps	cpsmidi	 	 
iamp	ampmidi	.3	 
kenv	expsegr	1, .05, 0.5, 1, .01
asig	pluck	kenv, icps, 200, 1, 1	 
	outs	asig, asig
f 1 0 4096 10 1	;sine wave

f0 30	;runs 30 seconds

See also

Linear and Exponential Generators


Author: Barry L. Vercoe

New in Csound 3.47