VIZZI · a visual lab

See what you are listening to.

Point it at the microphone, drop in a track or run the bench tone, and it draws what it hears — one reading of the sound each frame, handed to every picture on the stage at once.

The stage

Give it something to listen to.

VIZZI

stopped

Source nothing
Stage
Mode nothing loaded1.00×±0.0st
Drop a track anywhere
Level 0
Peak 0
Bands — sub to air
Beat bpm
Brightness 0
Crest peak ÷ level
Sensitivity
×1.00

FX none on

Save

nothing recalled

Click a tile to aim, again to walk it. 1 4 9 W stage · space play/pause · 10 s, hold to scan · [ ] mode · F fullscreen · shift+digit slots. Right-click anything. Tap a tile to aim, again to walk · double-tap fullscreen · hold for more

The deck

Shape what the modes are fed.

Drop a track on the stage and this comes alive. The analyser sits at the END of this chain, so every control here changes the picture as well as the sound — push the low shelf and the modes that follow the bass grow; close the filter and the ones that follow the treble go quiet. Tempo and pitch are separate controls: tempo sets how fast the track runs, pitch sets its key, and moving one leaves the other where it is.

Deck

nothing loaded

Nothing loaded

Drop a track anywhere, or roll the dice

0:00.0-0:00.0

space play · 10 s, hold to scan · shift 30 s · P N previous next · [ ] mode

Tempo Speed / time

1.00×

Pitch Key / detune

±0.0st

Press to recall. Hold for 0.6 seconds, or press Shift+Enter, to store the current tempo and pitch here.

Tone

Flat — the three filters are at unity across the band

Space

Output

RMS Peak Crest

Queue empty

    Anything this browser decodes — MP3, M4A, WAV, FLAC and more. The Method has the list.

    Library not loaded

    Deals ten tracks from all four lists into the queue, every track once in a fair random order before any comes round again.

    Pick E1, E2, E3 or E4 — the four lists the Audio Engine plays, from eriks.best/e/. Nothing is fetched until you do.

    move · enter play now · Q or + queue · space select · / find

    The modes

    What it can draw, and what drives it.

    Every mode is handed the same reading of the sound — the waveform, the spectrum, eight bands from sub to air, the loudness, a beat flag and where the energy is sitting — and decides for itself what to do with it. They are listed here with the part of the signal each one actually follows, because “reacts to music” is what everything claims and nothing explains.

    Method

    One analysis, many pictures.

    What is measured

    A single analyser at 2048 samples, read once a frame. From it: the raw waveform, 1,024 frequency bins, eight bands spaced logarithmically because hearing is logarithmic, the RMS level, the loudest sample, a spectral centroid for “brightness”, and a beat.

    The beat is energy-over-history: the sub-band energy against the mean of the last second and a half, with a floor so silence cannot ring it and a refractory period so one kick is one beat rather than four. It is not a musical downbeat and does not claim to be. The tempo shown is the median gap between the last nine of them.

    Nine at once, one FFT

    Every mode on the stage is given the same reading. Nine tiles is nine draws and one analysis — an analyser per tile would be nine transforms of the same signal producing nine identical answers.

    Tempo without the pitch

    Pitch and tempo move independently: tempo changes the time, pitch changes the key. A track is decoded into memory and played by a time-stretcher in an AudioWorklet — the one Laband runs, with a loop that goes round to the sample and a search that may look back when the tempo is very slow. Windowed grains of the record are laid down to make the same music at a new length, then read back at the new key. Where a browser has no AudioWorklet the same code runs on a ScriptProcessor, and renders the same samples.

    Measured through the deck across the whole of both rails on generated tones, and on an organ recording from the library at 0.74× and −2.2 semitones: the key within 1.17 cents at any held setting and 1.5 while the tempo is swept from end to end (the recording’s spectrum moved −219.5 cents of the −220 asked for); the length within 0.02% by the clock and by the end of the track, though what is heard can fade below half level up to 0.44% before that end; and the clock running at the tempo whatever the pitch is doing. Before, this deck had one speed control wearing two labels: at those settings it ran 12% slow and sounded 741 cents flat.

    Where it gives is drums. Slowed far enough, a sharp hit can smear into a roll: at 0.50× in the original key a click stays within 6 dB of its peak for about 33 ms, at 0.25× for up to about 180 ms and at 0.10× for up to half a second, the longest with the key raised. At 3–4× hits lose their edge — at 4× and ten semitones down a click typically loses about 20 dB of its peak and a softer hit about 11, the worst single hits 35 and 22 dB — and with the tempo up and the pitch far down, hits scatter by about 20 ms, the worst landing about 50 ms off the beat. Over sustained sound a stretched hit is typically heard up to about 100 ms from where the clock puts it at 0.25× (a single hit up to about 130) and up to about 50 ms at 0.74×, and moving the pitch while the tempo is far from 1.00× can move a hit by up to 110 ms.

    A hand on the platter reads the record straight, so a scratch moves pitch with speed, as a record does; let go and the key glides back to the dial with the motor. The microphone and the bench tone are live and are never stretched, and a file shorter than two of the stretcher’s windows — 8,192 samples, about 0.19 s at 44.1 kHz and 0.17 s at 48 kHz — plays as a record unless it loops.

    On paper

    This page has a paper edition, which is the hard case for a visualiser: on black a white line is the loudest thing on the screen, and on white it is invisible. Every colour a mode produces passes through the estate’s ink function, which keeps the hue and the alpha, moves the lightness into the ink range, and inverts greys and whites. Additive glow is switched to ordinary compositing there too, because “lighter” on white saturates to white and erases the mode it was meant to make glow.

    What it does not do

    It does not record your sound or upload it. The microphone is connected to the analyser and to nothing else — not to your speakers, which is how a visualiser avoids feeding back in a room with the volume up. The settings it remembers — slots, presets, the shuffle’s place — stay in this browser.

    What it will play

    Whatever the browser you are in can decode — the line below asks it, format by format. Measured in Chrome: WAV, AAC in M4A, FLAC and Opus decode; AIFF and Apple Lossless do not, and it offers no WMA or APE.

    MP3, M4A, WAV and FLAC are the safe choices; Ogg and Opus depend on the browser.

    A file you drop is read into this page’s memory and decoded here. It is never uploaded, and the sound itself is stored nowhere. A track from the library is fetched from eriks.best/e/ only when it is about to play — its turn in the queue, or a press that plays it now.

    Why nothing clicks

    A control that jumps puts a step into the signal, and a step is a click you hear and a spike every mode draws. So Low, Mid, High, Filter, Width, Echo, Motion and Level glide to each new value — exponential moves with time constants of 20 to 80 ms — instead of landing on it. A change between chorus and flanger fades the effect out, moves the delay, and fades it back in. Drive is the exception: its saturation curve changes in one step, and only its level make-up glides. A seek dips the sound for about 4 ms either side of the jump.

    Tempo and pitch re-lay only the part of the stretch not yet heard. Measured on a steady 440 Hz tone, one step of either — 0.005× or 0.1 semitone — added at most 0.1 dB of energy above 2 kHz at the moment of the move, and dipped the level by at most 0.31 dB for 5 ms. The worst move measured, ten semitones at 2×, added 12.4 dB there — still 14.5 dB under a hard 0.1 ms cut.

    The stretcher is light: at the hardest setting measured, 4× and ten semitones down, it used 1.4% of one processor core, timed outside the page.