Skip to content

expseg

Trace a series of exponential segments between specified points.

Syntax

ares = expseg(ia, idur1, ib [, idur2] [, ic] [...])
kres = expseg(ia, idur1, ib [, idur2] [, ic] [...])
ares expseg ia, idur1, ib [, idur2] [, ic] [...]
kres expseg ia, idur1, ib [, idur2] [, ic] [...]

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

Performance

The magnitude changes by a constant factor within each segment. All points must be non-zero and have the same sign; negative points are allowed. Segment lengths round to the nearest whole control periods for kres and whole samples for ares.

If the note ends before the segments finish, the curve stops. If the note continues, the final segment keeps the same exponential rate beyond its stated endpoint.

Examples

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

Example of the expseg opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in
-odac             ;;;RT audio out
; For Non-realtime ouput leave only the line below:
;-o expseg.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

; by Kevin Conder, additions by Menno Knevel 2021

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

instr 1

kcps = cpspch(p4)                            ; p4 = frequency in pitch-class notation.
kenv expseg 0.01, p3*0.25, 1, p3*0.75, 0.001 ; amplitude envelope.
kamp = kenv 
a1   oscili kamp, kcps
outs a1, a1

endin

</CsInstruments>
<CsScore>

i 1 0 0.5 8.00
i 1 1 0.5 8.01
i 1 2 0.5 8.02
i 1 3 2.0 8.03
e
</CsScore>
</CsoundSynthesizer>

See also

Linear and Exponential Generators

Credits

Author: Gabriel Maldonado

New in Csound 3.57