Skip to content

expon

Trace an exponential curve between specified points.

Syntax

ares = expon(ia, idur, ib)
kres = expon(ia, idur, ib)
ares expon ia, idur, ib
kres expon ia, idur, ib

Initialization

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

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

idur -- duration in seconds of the segment. A zero or negative value skips initialization, preserving the current value and rate during reinitialization.

Performance

The first output is ia. The magnitude changes by a constant factor at each audio sample or control cycle. For example, a curve from 1 to 4 passes through 2 halfway through idur. Both endpoints can also be negative; the curve stays on the same side of zero.

If the note lasts longer than idur, the curve continues past ib at the same exponential rate. If the note ends sooner, the curve stops at that point.

Examples

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

Example of the expon opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
; -o expon.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

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

instr 1 

kpitch = p6
;choose between expon or line
if (kpitch == 0) then   
  kpitch expon p4, p3, p5 
elseif (kpitch == 1) then
  kpitch line p4, p3, p5 
endif

asig   vco2 .6, kpitch 
       outs asig, asig

endin 
</CsInstruments> 
<CsScore> 

i 1 0 2 300 600    0    ;if p6=0 then expon is used
i 1 3 2 300 600    1    ;if p6=1 then line is used
i 1 6 2 600 1200   0
i 1 9 2 600 1200   1
i 1 12 2 1200 2400 0
i 1 15 2 1200 2400 1
i 1 18 2 2400 30   0
i 1 21 2 2400 30   1
e
</CsScore> 
</CsoundSynthesizer> 

See also

Linear and Exponential Generators