loading...
Press Play or choose a preset.
running...
How to use
The default preset gives clean Helmholtz motion. Time runs in slow motion (1/100) so you can follow the corner round the string; choose 1x real time and press Sound: on to hear the bridge force. Space pauses, R resets.
- Lower the bow force F_N: the string slips several times per cycle and the tone turns scratchy.
- Raise it too far: the tone turns raucous.
- Move the bow towards the bridge (small beta): you need much more force.
- The last graph is a regime map computed from this simulator; the dashed blue line is the ideal limit F_max.
Drag to orbit, wheel or pinch to zoom, or press Guided tour. Quality switches High/Low (also ?q=low).
The science
The string is modelled with d'Alembert's solution: transverse velocity splits into a right-going and a left-going wave, each travelling at c = sqrt(T/mu), so the fundamental is f1 = c/(2L). The simulation is a digital waveguide: four delay lines (nut to bow, bow to nut, bow to bridge, bridge to bow), inverting reflections at the rigid ends, a small loss per round trip and a one-pole low-pass at the bridge that damps high harmonics.
At the bow the waves meet a friction junction. The string velocity there is v_s = v_in + f/(2 Z0) with Z0 = mu c. If the bow can hold the string (|f| <= mu_s F_N) it sticks, v_s = v_b; otherwise it slips and the friction force follows mu(v) = mu_d + (mu_s - mu_d) exp(-|v|/v_s), which is solved by bisection every sample.
Helmholtz motion: stick for (1 - beta) of the period, slip for betav_slip = -v_b (1 - beta)/beta , mean string velocity at the bow = 0Raman limit: F_max = 2 Z0 v_b / ((mu_s - mu_d) beta)
The bridge force is close to a sawtooth with harmonics falling as 1/n, except that harmonics near multiples of 1/beta are suppressed (the bow sits near a node of those modes). The map in the last graph classifies short simulations into Helmholtz motion, several slips per cycle, raucous and no stick-slip. Schelleng's classical diagram has the same shape: a window between a minimum and a maximum bow force that narrows and rises as the bow moves toward the bridge.
Honest simplifications. One polarisation, perfectly flexible string (no stiffness or dispersion), frequency-independent loss except the bridge filter, a rigid bridge (no body feedback), a point bow with an instantaneous Stribeck-type friction law with no temperature or hair-width effects, and a pitch quantised to a whole number of grid steps (the pitch shown is the exact one used). The simulated F_max is lower than the ideal Raman limit because of losses and the finite Stribeck slope. Audio is the bridge force passed through three generic body-like resonances; it is not a model of a real violin.
In-page checks (reference run at 440 Hz, beta 0.12, v_b 0.2 m/s, F_N 0.6 N): pitch from stick-slip events against the grid frequency, stuck fraction against 1 - beta, mean string velocity against 0, mean slip velocity against -v_b(1 - beta)/beta.