Skip to content

expcurve

Generates a normalised exponential curve in range 0 to 1 of arbitrary steepness.

It is based on the Max / MSP work of Eric Singer (c) 1994. Steepness index less than 1.0 would result in Not-a-Number errors and cause unstable behavior so is treated as if it were 1.

The formula used to calculate the curve is:

(exp(x * log(y))-1) / (y-1)

where x is equal to kindex and y is equal to ksteepness.

Syntax

kout expcurve kindex, ksteepness

Performance

kindex -- Index value. Expected range 0 to 1.

ksteepness -- Steepness of the generated curve. Values closer to 1.0 result in a straighter line while larger values steepen the curve.

kout -- Scaled output.

Examples

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

Example of the expcurve opcode.
<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
; Audio out   Audio in    Silent
-odac           -iadc     -n    ;;;realtime output
</CsOptions>
<CsInstruments>

sr      =   44100
ksmps   =   1000
nchnls  =   2

        instr   1   ; logcurve test

kmod    phasor  1/p3
kout    expcurve kmod, p4

printks "mod = %f  out= %f\\n", 0.5, kmod, kout

        endin

/*--- ---*/
</CsInstruments>
<CsScore>

i1  0   5  2
i1  5   5  5
i1  10  5  30
i1  15  5  0.5

e
</CsScore>
</CsoundSynthesizer>

See also

Linear and Exponential Generators

Credits

Author: David Akbari
October
2006
Range check introduced in 6.16 by John ffitch