51 · Creative Spectral Processing

Spectral Playground

You already understand the machinery. Audio becomes frames, frames become FFT bins, we change the numbers, then IFFT and overlap-add turn them back into sound. So what else can we do between FFT and IFFT?

1 · Same machine · different rule

AUDIO → WINDOW → FFT → DO SOMETHING TO THE BINS → IFFT → OVERLAP-ADD → AUDIO
OperationOld DSP idea hiding underneath
FreezeSTORE
Spectral GateMEASURE → COMPARE → ×
BlurADD / AVERAGE neighbouring bins
ShiftMOVE / REINDEX
ScrambleREORDER
Spectral DelaySTORE → choose different history per bin
Morph A ↔ BINTERPOLATE magnitude + phase

2 · Playground

Mode / ValueBYPASS
Primitive—

No trick yet: the FFT frame passes through unchanged.

INPUT SPECTRUM

OUTPUT SPECTRUM

3 · STFT history · frequency across, time downward

Each row is one spectral frame. The top is NOW; older frames fall downward. This is the spectral equivalent of a delay line.

New frame every5.33 ms
Spectral frame rate187.5 fps
Hop256 samples
Overlap75%
Spectral Delay: centre the Delay Shape and every frequency reads roughly the same age. Move it left or right and different frequencies read different ages. At 2000 ms, parts of one output spectrum can be almost two seconds apart in source history.
DRY × (1−MIX) ─┐
SPECTRAL DELAY × MIX ─┴→ ADD → OUTPUT
Freeze: 100% Frozen Bins holds the entire captured FFT frame forever. Reduce it to hold only the strongest captured bins — useful for sustaining resonances while the unfrozen spectral detail continues moving.

4 · What each mode means

FREEZE = STORE

Capture one spectral frame and stop replacing it. At 100% Frozen Bins, every FFT bin is held indefinitely, so the sound becomes a permanent spectral snapshot. Reduce Frozen Bins and only the strongest captured bins remain held while the other bins continue to update from the incoming audio.

GATE = MEASURE → COMPARE

Measure each bin magnitude. If it falls below a threshold, multiply it towards zero.

BLUR = NEIGHBOUR AVERAGING

Replace each bin with an average of nearby bins. Fine spectral detail spreads into broader shapes.

SHIFT = REINDEX

Move spectral coefficients through the bin array. The control behaves like a pan knob: centre = 0 Hz, left shifts the spectrum down and right shifts it up. We interpolate between neighbouring bins so the movement is continuous rather than jumping one whole bin at a time. This is not ordinary pitch shifting: components move by approximately a fixed frequency offset rather than preserving harmonic ratios.

SCRAMBLE = REORDER

Gradually map bins to other locations. The spectral ingredients remain, but their organisation breaks apart.

DELAY = STORE PER FREQUENCY

Maximum Delay runs from 0 to 2000 ms. With Delay Shape centred, all bins read approximately the same point in history. Move left and low frequencies reach further into the past; move right and high frequencies do. Mix then combines the untouched current spectrum with the delayed spectrum.

OUTPUT = (1 − MIX) × DRY + MIX × SPECTRAL DELAY

MORPH = INTERPOLATE A ↔ B

Load a second sound and move each FFT bin from Sound A toward Sound B. We interpolate magnitude and also move the phase along the shortest circular path. That means the endpoints are unambiguous: 0% = A and 100% = B, while the middle is the spectral transition between them.

MAGNITUDE: |Y[k]| = (1 − M)|A[k]| + M|B[k]|
PHASE: A → shortest path → B

5 · None of this required a new kind of DSP

The strange sounds come from familiar operations applied to a different representation of the signal.

STORE · MEASURE · COMPARE · MULTIPLY · ADD · MOVE

We have simply gained access to the signal frequency by frequency and frame by frame.

Morph is the bridge forward: until now we mostly changed one spectrum. Now spectral information from Sound B can reshape Sound A. The next step is to make that control relationship explicit.
Next · Vocoder

What if one sound controls another?

VOICE → ANALYSE → CONTROL INFORMATION → APPLY TO ANOTHER SOUND

That should look strangely familiar.