This is a 2D companion to the 3D Singing Bowl simulator, driven by a real friction self-oscillator instead of a decorative animation:
- Ring-mode frequency: the fundamental is computed from the classic thin circular-ring bending-mode formula fm = (h / 2πR²)·√(E / (12ρ(1−ν²)))·m²(m²−1)/√(m²+1), using bronze-like constants for wall thickness h, radius R and nodal-diameter count m — thinner walls and smaller bowls really do ring higher.
- Stick-slip excitation: the mallet drags the rim by static friction ("stick") until the mode's elastic restoring force overcomes the grip and the surface slips, exactly like a bow on a violin string. This is modelled as a Van der Pol self-oscillator, q″ − μ(1−q²)q′ + ω₀²q = 0, where the negative-damping term μ is switched on only while the rubbing speed sits in the range real singing bowls "catch" (too slow or too fast and the friction stays in pure sliding, and the tone dies) — that's why dragging the slider to the extremes silences the bowl.
- Standing wave shape: the rim outline is drawn as R₀ + A·cos(mθ)·cos(φ), the m-nodal-diameter mode shape a real bowl or wine glass rings in; the oscillator's own envelope (a smoothed |q|) sets the amplitude A, so the wobble grows in from silence and settles at a steady singing amplitude just like the real object.
- Real tone: enabling sound starts WebAudio oscillators at fm plus its next two ring harmonics, with gains driven live by the same envelope — the pitch you hear is the frequency the physics actually computed for the current radius/thickness/mode, not a canned sample.
Drag the mallet speed until the bowl "catches" and starts singing, then change radius, thickness or mode to hear and see the pitch and nodal pattern shift in real time.