Skip to content

cossegr

Trace a series of line segments between specified points with cosine interpolation, including a release segment.

Syntax

ares = cossegr(ia, idur1, ib [, idur2] [, ic] [...], irel, iz)
kres = cossegr(ia, idur1, ib [, idur2] [, ic] [...], irel, iz)
ares cossegr ia, idur1, ib [, idur2] [, ic] [...], irel, iz
kres cossegr 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 that segment's end value and continues with the next segment.

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

Performance

Before the release, segment durations use whole samples at audio rate and whole control periods at control rate. A positive duration that rounds to zero steps also jumps to its end value; later segments still run.

After the segments before the release finish, cossegr holds their final value until the note ends or it receives a MIDI note-off. The release starts from the current output, even if an earlier segment is still running, and ends at iz. MIDI Note Off velocity does not control the release segment.

At both output rates, irel rounds to the nearest whole control period. 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 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 cossegr, since the time is extended automatically.

Examples

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

Example of the cossegr 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    cossegr 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: John ffitch

August 2012.

New in Csound 5.18