Signal Generators: Linear and Exponential Generators

## loopseg, lpshold

```
kr      loopseg    kfreq, ktrig, ktim0, kval0[, ktim1, kval1,...ktimN, kvalN]

kr      lpshold    kfreq, ktrig, ktim0, kval0[, ktim1, kval1,...ktimN, kvalN]

```

### Description

Generate a control signal, or envelope, consisting of linear segments delimited by two or more specified points. The entire envelope is looped at kfreq rate. Each parameter can be varied at k-rate. New in Csound 4.13

### Performance

kfreq – repeat rate. Expressed in Hz or fraction of Hz. Negative values will read the envelope backward.

ktrig – if non-zero, retriggers the envelope from start, before the envelope cycle is completed. See trigger opcode.

ktim0, ktim1, etc. – time of points. Expressed, in arbitrary units, as a fraction of a complete cycle. ktim0 will usually be set to 0, except for special effects.

kval0, kval1, etc. – values of points

loopseg is similar to linseg, except the entire envelope is looped at kfreq rate. Note that times are not expressed in seconds, but as a fraction of a complete cycle. The relative duration of each segment is is fixed proportionally to the others, as defined by ktim0, ktim1, etc. The duration of an entire cycle is the sum of all duration values, rescaled according to kfreq. For an envelope made up of three segments, with each segment having 100 as a duration, the total duration will be 300. This duration, in arbitrary units, is then scaled by kfreq to obtain the actual envelope duration in seconds.

lpshold is similar to loopseg, but generates only horizontal segments. Each kval is held for the duration of the segment. This is useful for, among other things, melodic control, similar to analog sequencers.

### Example

```
instr 1

kfreq   init       .5          ; set duration of loop at 2 seconds

k0      line       1, p3, 33   ; increase duration of first segment on each repetition

k1      loopseg    .5, 0, 0, 0, k0, 32000, 66, 5000, 100, 0

endin

```

Signal Generators: Linear and Exponential Generators