SpectralOli Documentation
back to app

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 project

Quick Start

Chains evaluate left to right. A region expression becomes a magnitude multiplier per spectral bin.

Frequency Methods

CallBehavior
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

CallBehavior
.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)

ParameterDefaultDescription
poolSize2memory pool span in seconds
scatter0.50 stutters, 1 floats randomly
grainRate80grain step period in milliseconds
density0.8wet/dry amount of granulation
freeze01 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)