expsegr
Trace a series of exponential segments between specified points including a release segment.
Syntax
Initialization
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 negative value skips initialization and preserves the current envelope state. Zero jumps immediately to ib.
idur2, idur3, etc. -- duration in seconds of subsequent segments. A zero or negative duration jumps to the next value and continues with the following segment. The default is zero.
irel, iz -- duration in seconds and final value of the release segment. Like the other values, iz must be non-zero and have the same sign as ia.
Performance
These units generate control or audio signals whose values can pass through 2 or more specified points. If the note ends before the specified segments finish, the release starts from the current value. If the segments finish first, the last value before the release holds until the note ends.
Segment durations round to the nearest whole control period for kres and down to whole samples for ares. A duration that becomes zero steps jumps to the next value without taking an extra step. 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). MIDI Note Off velocity does not control the release segment. For two or more extenders in an instrument, extension is by the greatest period.
expsegr starts its release when the note ends or it receives a MIDI note-off. The release duration rounds to whole control periods at both output rates. A release that rounds to zero jumps straight to iz. The instrument stays active for one extra control period to output iz. If several opcodes extend the note, the longest extension applies.
You can use other pre-made envelopes which start a 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.
Examples
Here is an example of the expsegr opcode. It uses the file expsegr.csd.
See also
Linear and Exponential Generators
Credits
Author: Barry L. Vercoe
New in Csound 3.47