Getting Started
SpectralOli is a real-time browser-based spectral livecoding environment. Load one or more loops, write DSL expressions per track, and sculpt sound by shaping frequency regions, time behavior, blur, and granulation.
THIS IS A DEMO
This section is a reminder to ping me when you encounter any bugs. This is a demo and I am actively building this projectQuick Start
- Upload audio with
Upload audioor search withQuery Freesound. - Press
Play Allto start transport and spectral processing. - Type a DSL expression in a track code box and apply with
Ctrl+Enter. - Adjust BPM and beats to change the global cycle all loops follow.
Chains evaluate left to right. A region expression becomes a magnitude multiplier per spectral bin.
Frequency Methods
| Call | Behavior |
|---|---|
low(hz) | pass frequencies below hz |
high(hz) | pass frequencies above hz |
band(min, max) | pass frequencies between bounds |
notch(min, max) | cut frequencies between bounds |
.add(region) | union with another region (Math.max) |
Arguments support arithmetic, Math.*, %, parentheses, and time.
band(440 * 2, 440 * 8)
high(Math.PI * 700)
low(time * 800 % 8000)
band(Math.sin(time * 0.5) * 1000 + 1500, 4000)
band(200, 4000).add(high(8000))
Time Methods
| Call | Behavior |
|---|---|
.fast(multiplier) | speed up playback by a factor (any positive number) |
.slow(divisor) | slow down playback by a factor (any positive number) |
.fit(cycles) | fit loop to a specific number of BPM cycles |
.rev() | reverse playback direction |
band(200, 4000).fast(2)
band(200, 4000).slow(2)
band(440 * 2, 440 * 8).fit(4)
band(200, 4000).rev()
band(200, 4000).fast(2).rev()
Spectral Blur
.blur(freq_amt, time_amt) smears spectrum in frequency and time. Both args are optional and default to 0.5.
blur(0.8, 0)
blur(0, 0.85)
blur(0.3, 0.6)
blur(Math.sin(time * 0.25) * 0.25 + 0.5, 0.6)
band(200, 4000).blur(0.5, 0.4)
Spectral Granulator
.granulate(poolSize, scatter, grainRate, density, freeze)
| Parameter | Default | Description |
|---|---|---|
poolSize | 2 | memory pool span in seconds |
scatter | 0.5 | 0 stutters, 1 floats randomly |
grainRate | 80 | grain step period in milliseconds |
density | 0.8 | wet/dry amount of granulation |
freeze | 0 | 1 captures and holds pool, 0 keeps recording |
granulate(2, 0.5, 80, 0.8, 0)
granulate(0.5, 0, 30, 1, 0)
granulate(4, 1, 60, 0.9, 0)
granulate(2, 0.7, 80, 1, 1)
band(200, 4000).granulate(2, 0.5, 80, 0.8, 0)