ARCOAURA PHYSICAL MODEL // S01
String Simulation
A bounded real-time harmonic source currently turns MIDI pitch, excitation, decay, release, and simple harmonic content into the signal a pickup model observes.
Harmonic model activeThe string comes before the tone
ArcoAura begins with generated string-like motion rather than a finished guitar sample. In the intended physical model, scale length, tension, linear density, excitation, and boundary behavior determine how that energy develops.
The current real-time implementation is an early bounded harmonic model. It tracks active MIDI voices, converts each note to frequency, applies attack, decay, release, and fixed second- and third-harmonic content, then renders continuously in the audio callback. It does not yet derive frequency from physical tension or model dispersion, stiffness, fret interaction, bridge and nut reflection, or sympathetic coupling. Those remain explicit fidelity work.
What realistic string motion must preserve
- Fundamental frequency derived from speaking length, tension, and linear density
- Pluck position and direction, which determine the initial harmonic distribution
- Frequency-dependent damping rather than one envelope for every partial
- Stiffness and dispersion, which make upper partials slightly inharmonic
- Bridge, nut, fret, and body terminations that return energy differently
- Per-string gauge, action, scale length, tuning, and pickup observation points
- Continuous state across audio blocks so a note does not restart at each callback
Harmonics as an understandable first model
This executable ArcoBASIC example communicates the current model directly. Each partial has its own amplitude and decay, and pickup position can later observe the resulting motion without changing the string itself.
' Calculate string displacement at one instant.
FUNCTION StringMotion(frequencyHz, timeSeconds, velocity)
phase = Math.TAU() * frequencyHz * timeSeconds
' The fundamental carries most of the energy.
fundamental = SIN(phase)
' Upper partials begin quieter and can decay more quickly.
second = 0.32 * SIN(phase * 2)
third = 0.18 * SIN(phase * 3)
' Math.Pow expresses exponential energy loss without hiding the rate.
decay = Math.Pow(2.718281828, -timeSeconds * 2.8)
attack = MIN(1, timeSeconds * 240)
RETURN (fundamental + second + third) * decay * attack * velocity
END FUNCTION
PRINT StringMotion(110, 0.025, 0.8)The next fidelity layer
A digital waveguide can represent waves traveling toward the bridge and nut, then apply reflection, loss, dispersion, and coupling filters at each boundary. A modal model can represent each resonant mode explicitly. ArcoAura can use either or combine them, because the pickup boundary accepts simulated string motion rather than depending on one synthesis algorithm.
Realism is not achieved by adding random brightness. Every added behavior should correspond to an inspectable physical cause and remain stable at real-time sample rates.
What travels past this string model
The specific choice to model string motion as summed harmonics with attack, decay, and release envelopes is not the transferable part. A different project’s first approximation will look nothing like a sine sum. What is worth keeping is the discipline used to build that approximation honestly and leave room to replace it.
The same discipline shows up anywhere a placeholder implementation has to ship before the full one is ready: a stubbed API that returns realistic shaped data before the real backend exists, a database migration that documents which invariants it does not yet enforce, a UI that renders a deliberately partial state instead of quietly pretending it is finished.
- Ship the smallest model that produces a real, audible signal, here three summed harmonics with attack and decay, rather than waiting for the complete physical simulation to exist before anything can be heard or tested.
- Write down what the current model does not do, not just what it does. Listing dispersion, stiffness, and sympathetic coupling as explicit gaps turns "someday better" into a concrete backlog instead of a vague promise.
- Design the interface at the boundary the model exists to serve. The pickup receives "simulated string motion," so the internal algorithm can be replaced later, harmonic sum today, waveguide or modal model tomorrow, without breaking anything downstream.
- Require that every added behavior trace to an inspectable cause and hold up at real-time sample rates, not to a listener’s guess that it merely sounds more real now.
Key terms, in plain language
You do not need a systems background to follow the work. These are the specialized terms used on this page.
- Physical modeling
- Producing sound by simulating the behavior that causes it, such as a vibrating string or electrical circuit, instead of replaying a recording of the finished result.
- Partial
- One sinusoidal component of a complex vibration. A harmonic is a partial whose frequency is a whole-number multiple of the fundamental frequency.
- Digital waveguide
- A computational model that represents waves traveling in opposite directions along a string or tube, with filters describing reflection, loss, and dispersion at the boundaries.
- Inharmonicity
- The amount by which a vibrating string’s upper partials differ from exact whole-number multiples of its fundamental, often because real strings have stiffness.
- Polyphony
- The number of independent notes or voices that can sound at the same time. A bounded voice count keeps real-time work predictable.