The Aeolian
The story behind The Aeolian
Inspired by Aeolian sound on Wikipedia
Built with Canvas 2D · Web Audio API · Sine Oscillators
Techniques Standing Wave Visualization · Gaussian Harmonic Resonance · Speed-Dependent Excitation · Delay Reverb
Direction You are invisible — you only know yourself through what you set vibrating
Result A wind instrument where your cursor is the wind
The Story
When wind passes over a wire, a flagpole, a power line, it sheds vortices alternately from each side — a Von Kármán street. These vortices push the object back and forth at a frequency determined by the Strouhal number: roughly f = 0.2 × v / d, where v is wind speed and d is diameter. The faster the wind, the higher the pitch. This is aeolian sound — named for Aeolus, keeper of the winds.
The aeolian harp is the only musical instrument played entirely by nature. Strings of different thickness are stretched across a frame and placed in a window. The wind doesn’t pluck them — it excites them continuously, producing pure harmonics that shift as wind speed changes. Crucially, aeolian harps almost never sound their fundamental frequency. The excitation always favors overtones. A slow breeze might excite the 2nd harmonic. A gust leaps to the 6th, the 8th, the 12th. The chord changes with the weather.
What captivated me is the indirection. You never touch the strings. You never choose the notes. You are just wind — formless, invisible — and the only evidence of your existence is the sound you leave behind in things you passed through.
The Take
Sixteen strings stretch horizontally across a pale field. They’re silent and grey — barely visible, like ruled lines on empty paper. The only instruction: move to listen.
Move your cursor slowly near the lower strings and they wake. Thick bass strings bow outward in deep standing waves — the 2nd harmonic, a single arc pinned at both ends. A node dot marks the center. A soft teal glow blooms around the vibrating string. You hear a low tone, sustained, reverberant.
Move faster. The resonance climbs. The middle strings begin to sing — 4th, 5th, 6th harmonics, their standing waves showing two, three, four lobes. Move faster still and the highest strings activate — the 11th and 12th harmonics, thin as hair, dotted with a dozen nodes, trembling in tight oscillation. The chord rises with your speed, exactly as wind excites higher overtones on a real aeolian harp.
Stop, and the music dies. The strings decay back to grey silence. You are invisible again. You have no presence in this space except through the things you set vibrating.
The Tech
Standing Wave Physics
Each string has a harmonic number h (from 2 to 12 — never the fundamental, matching real aeolian behavior). The visible vibration displaces each point perpendicular to the string by sin(h × π × t) × sin(2π × f_vis × time), where t is the parametric position along the string and f_vis is a randomized visual frequency (2.5–4.5 Hz). This produces a standing wave with h-1 antinodes and h+1 nodes, sampled at 80 points per string for smooth curves.
Speed-to-Harmonic Mapping
Cursor velocity is smoothed over time (smoothSpeed += (speed - smoothSpeed) × dt × 6) and normalized against a maximum of 1800 DPR-scaled pixels per second. This produces an “exciting harmonic” value excH = 2 + spdN × 10, ranging from 2 (slow) to 12 (fast). Each string’s response is determined by a Gaussian resonance function: exp(-(h - excH)² × 0.25). Strings whose harmonic number matches the exciting harmonic respond strongly; those far from it stay silent. The result is a smooth chord that rises continuously with speed, not discrete threshold jumps.
Proximity × Resonance × Gate
A string’s amplitude is the product of three factors: proximity (inverse distance from cursor to the nearest point on the string segment, clamped to an 80px radius), resonance (the Gaussian match described above), and a speed gate (linear ramp from 0 to 1 below 50 DPR-scaled px/s). The gate ensures perfectly still cursors produce no sound — you must move to be heard. Attack is fast (12× per second), release is slow (0.7× per second) for lingering resonance after the cursor passes.
Web Audio Topology
Each string has a dedicated sine oscillator at its physical frequency (55 Hz × harmonic ± slight detuning). Gain nodes are modulated by the amplitude value computed per frame via setTargetAtTime with an 80ms time constant for smooth transitions. All oscillators feed a master gain (0.12) which also routes through a delay-based reverb: 0.4s delay → lowpass filter at 1600 Hz → feedback at 0.25 → wet mix at 0.15 to the output. The reverb gives each note atmospheric sustain without explicit envelope shaping.
Visual Rendering
Each string is rendered in three layers: an outer glow (28px wide, 6% alpha teal), an inner glow (10px, 18% alpha), and the main line. String thickness ranges from ~6px (2nd harmonic) to ~0.5px (12th harmonic), creating visible bass/treble distinction. Color transitions from neutral grey (rgb(155, 158, 165)) to vivid teal (rgb(40, 168, 180)) as amplitude increases. Harmonic nodes — the points of zero displacement — appear as teal dots when the string is active, making the wave physics visible.
This blog post was AI generated with Claude Code. Authored by Artificial Noodles.