Skip to content

expsegb

Trace a series of exponential segments between specified absolute points.

Syntax

ares = expsegb(ia, itim1, ib [, itim2] [, ic] [...])
kres = expsegb(ia, itim1, ib [, itim2] [, ic] [...])
ares expsegb ia, itim1, ib [, itim2] [, ic] [...]
kres expsegb ia, itim1, ib [, itim2] [, ic] [...]

Initialization

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

ib, ic, etc. -- value at tim1 seconds, etc. For exponentials, must be non-zero and must agree in sign with ia.

itim1 -- time in seconds at the end of the first segment. A zero or negative value skips initialization, preserving the current curve during reinitialization.

itim2, itim3, etc. -- times in seconds at the ends of later segments. Times must not decrease.

Performance

Each time gives an endpoint's position in seconds from the start of the envelope. Each time rounds to the nearest control period for kres and the nearest sample for ares. The magnitude changes by a constant factor between points. All points must be non-zero and have the same sign; negative points are allowed.

If several points round to the same update, the output jumps to the last value at that update. If the note continues past the final time, the final segment keeps the same exponential rate. When the final two points share an update, the output holds the final value.

Examples

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

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

; Initialize the global variables.
sr = 44100
ksmps = 10
nchnls = 1
0dbfs = 1

; Instrument #1.
instr 1
  ; p4 = frequency in pitch-class notation.
  kcps = cpspch(p4)

  ; Create an amplitude envelope.
  kenv expsegb 0.01, p3*0.25, 1, p3, 0.01
  kamp = kenv * 0.9

  a1 oscil kamp, kcps, 1
  out a1
endin


</CsInstruments>
<CsScore>

; Table #1, a sine wave.
f 1 0 16384 10 1

; Play Instrument #1 for a half-second, p4=8.00
i 1 0 0.5 8.00
; Play Instrument #1 for a half-second, p4=8.01
i 1 1 0.5 8.01
; Play Instrument #1 for a half-second, p4=8.02
i 1 2 0.5 8.02
; Play Instrument #1 for a half-second, p4=8.03
i 1 3 0.5 8.03
e


</CsScore>
</CsoundSynthesizer>

See also

Linear and Exponential Generators

Credits

Author: Victor Lazzarini
June 2011

New in version 5.14