← Back to the workshopEXPERIMENT 02 / WAVE BENCHStarting…

A SMALL EXPERIMENT IN MOTION

Pull a thread.
Make a wave.

A string, a pulse, and a little room to play.
Click anywhere along the line to pluck it.

192 connected points · fixed ends
DISPLACEMENT / POSITION0CLICK OR TAP TO PLUCK

LISTEN AND INSPECT

Hear the pluck. Find its frequencies.

Sound stays off until enabled. A pluck makes a damped harmonic sound; injecting a tone adds one frequency for comparison.

AUDIO FREQUENCY / HzEnable sound to listen
Live audio spectrum from 55 Hz to 2 kHz.
Learning mode: what the FFT is doing

The upper trace stores displacement by position along a 192-point string. Those points are not audio frequencies. The browser makes a separate sound signal; this graph analyzes that signal in hertz.

For a block of N audio samples, the discrete Fourier transform compares the signal with repeating sine and cosine waves: X[k] = Σ x[n] e−i2πkn/N. The FFT gets the same answers by splitting samples into even and odd groups, then combining their smaller transforms: X[k] = E[k] + WNkO[k] and X[k+N/2] = E[k] − WNkO[k], where WNk = e−i2πk/N. Repeating that split takes about N log₂ N work instead of N². A bright peak means that a matching frequency is strongly present.

Each bin k represents k × sample rate ÷ N hertz. The browser groups nearby frequencies into bins and applies a window, so a peak can spread across neighbors. A pluck makes a mix of partials. Inject tone plays a short sine wave at the selected frequency and gives the upper string view a one-time pulse at the selected position; the tone does not continuously drive that view.

The string motion is an illustrative model, not a calibrated physical simulation. Its spatial samples are separate from the synthesized audio FFT. Your device computes both locally; no input or audio is uploaded.