Skip to content

linsegr

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

Syntax

ares = linsegr(ia, idur1, ib [, idur2] [, ic] [...], irel, iz)
kres = linsegr(ia, idur1, ib [, idur2] [, ic] [...], irel, iz)
ares linsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz
kres linsegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz

Initialization

ia -- starting value.

ib, ic, etc. -- value after dur1 seconds, etc.

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 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 a note releasing segment.

For Csound versions prior to 5.00, the release time cannot be longer than 32767/kr seconds. This limit has been extended to (231-1)/kr.

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 or sample for ares. A positive duration that rounds to zero jumps to the next value without taking an extra step. The release duration rounds to whole control periods at both rates; a release that rounds to zero jumps straight to iz.

linsegr 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.

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

Examples

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

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

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

instr 1


icps    cpsmidi          
iamp    ampmidi .3       

kenv    linsegr 1, .05, 0.5, 1, 0
asig    pluck   kenv, icps, 200, 1, 1    
        outs    asig, asig

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

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

See also

Linear and Exponential Generators

Credits

Author: Barry L. Vercoe

December 2002, December 2006. Thanks to Istvan Varga, added documentation about the maximum release time.

New in Csound 3.47