Files
Cagire/docs/lfo.md

75 lines
1.3 KiB
Markdown

# LFO & Ramps
Generate time-varying values synchronized to the beat for modulation.
## Ramp
The `ramp` word creates a sawtooth wave from 0 to 1:
```forth
0.25 1.0 ramp ( one cycle per 4 beats, linear )
1.0 2.0 ramp ( one cycle per beat, exponential curve )
```
Stack: `(freq curve -- val)`
## Shortcut Ramps
```forth
0.5 linramp ( linear ramp, curve=1 )
0.25 expramp ( exponential ramp, curve=3 )
2.0 logramp ( logarithmic ramp, curve=0.3 )
```
## Triangle Wave
```forth
0.5 tri ( triangle wave 0→1→0 )
```
## Perlin Noise
Smooth random modulation:
```forth
0.25 perlin ( smooth noise at 0.25x beat rate )
```
## Range Scaling
Scale a 0-1 value to any range:
```forth
0.5 200 800 range ( 0.5 becomes 500 )
```
## Examples
Modulate filter cutoff:
```forth
"saw" s
0.25 1.0 ramp 500 2000 range lpf
.
```
Random panning:
```forth
"hat" s
0.5 perlin -1 1 range pan
.
```
## Words
| Word | Stack | Description |
|------|-------|-------------|
| `ramp` | (freq curve -- val) | Ramp 0-1: fract(freq*beat)^curve |
| `linramp` | (freq -- val) | Linear ramp (curve=1) |
| `expramp` | (freq -- val) | Exponential ramp (curve=3) |
| `logramp` | (freq -- val) | Logarithmic ramp (curve=0.3) |
| `tri` | (freq -- val) | Triangle wave 0→1→0 |
| `perlin` | (freq -- val) | Perlin noise 0-1 |
| `range` | (val min max -- scaled) | Scale 0-1 to min-max |