Visualizations
160 / 500

160 · Physics

Bowed String

Helmholtz motion on a bowed violin string, with a Schelleng diagram measured live.

The string is a digital waveguide with slightly lossy, lowpassed reflections at the bridge and the finger, and a bow that either holds the string at its own speed or lets it slip against a friction that falls with sliding speed, solved every sample with hysteresis. That one nonlinear point is enough for Helmholtz motion to appear on its own: a single rounded corner racing around a lens-shaped envelope, the string sticking to the hair for most of each period and flying back once, shown with a stroboscope that slows it several hundred times. The Schelleng diagram plots bow force against bow position on log axes, with Schelleng's 1973 limits drawn as lines and a map behind them measured by running this same model, by continuation, at 220 settings; it reproduces the wedge, raucous above and multiple slipping below. The scope shows the stick-slip velocity and the sawtooth force on the bridge, the contact view replays one period of grip and release, and the tone you hear after a click is that bridge force through a few body resonances.

Try it. Drag the dot in the Schelleng diagram to set bow force and position, or drag the bow along the string. Up and down arrows change the force, left and right move the bow, keys 1 to 4 pick the G, D, A or E string, Space reverses the bow, M mutes; sound starts on the first click.

  • Digital waveguide
  • Stick-slip friction
  • Helmholtz motion
  • Schelleng diagram
  • Stroboscopic sampling
  • Web Audio buffers

View the source · one module, plus a small shared runtime for sizing, the animation loop and input

Build your own

Paste this into Claude Code, Codex or any coding agent to get a simple version running, then take it wherever you like.

Build a bowed string simulation with JavaScript and the HTML canvas element that shows Helmholtz motion, the hidden way a violin string moves. Put everything in a single index.html file with no libraries or build step, so I can open it directly in a browser.

Start simple:
- Make a canvas that fills the window, stays sharp on high-DPI screens (scale by devicePixelRatio), and resizes with the window.
- Model the string as a digital waveguide: two Float32Arrays of 80 velocity values, one moving right toward the bridge and one moving left toward the nut, each shifted one cell per step. At both ends, reflect with a sign flip; at the bridge also multiply by 0.98 and average with the previous reflected value as a simple lowpass.
- Put the bow at about one eighth of the length from the bridge. Each step, add the two incoming velocities there to get the string's free velocity. If holding the string at the bow's speed would take less force than static friction allows, it sticks; otherwise it slips against a friction that falls with sliding speed. Add the resulting velocity change to both outgoing waves.
- Recover the string's shape by adding up (left wave minus right wave) from the nut to the bridge, and draw it with the displacement exaggerated.

Once that works, make it reveal the motion:
- The motion repeats every 160 steps or so. Take one snapshot per frame a whole number of periods plus a sliver after the last one, so the shape crawls in slow motion instead of blurring, and you will see a single sharp corner racing around a lens-shaped envelope.
- Plot the bow-point velocity over three periods: flat while sticking, a sharp dip at each slip.
- Let me drag to change bow force and bow position, and color the screen by whether there is one slip per period (Helmholtz motion), several, or no clean pattern.

Explain the key ideas in short code comments. When you're done, tell me how to open it and suggest three directions I could take it next, such as a Schelleng diagram of force against position, playing the bridge force as sound with Web Audio, or reversing the bow direction to watch the corner flip.
PreviousNaming GameVillagers on a hand-drawn island invent words and talk their way into dialects. NextFourier EpicyclesA chain of spinning circles traces any drawing you give it.

Related visualizations

  • Plucked StringsSound Seven finite-difference strings to pluck, with live harmonics and slow-motion kinks.
  • Glass HarpSound Ray-traced wine glasses, tuned with water and sung by stick-slip friction on the rim.
  • Wind HarpPhysics An Aeolian harp on a misty hill: vortex shedding picks the harmonic each string sings.
  • DrumheadSound A floor tom whose sound is sampled live from the 2D wave equation that draws its head.
  • Birdsong SyrinxSound Birdsong from a two-knob nonlinear oscillator, printed live as an ink sonogram.
  • Xenakis GlissandiGenerative art Metastaseis-style string glissandi as ruled surfaces on graph paper, and a gas of notes.
  • Music BoxSound A pinned brass drum plucks cantilever tines from a punched strip you can edit.
  • Chladni PlateSound Sand dances into Chladni figures on a brass plate whose modes come from the Ritz method.
  • CochleaSound An unrolled inner ear: traveling waves on the basilar membrane sort a chord by pitch.

Use ← and → to move between demos. While the canvas has focus, keys go to the demo instead.

← More from Emergent Mind Labs