Topics: Physical models of self-sustained oscillators (winds, bowed strings), Macro substitution

"On the Oscillations of Musical Instruments" was published in 1983 (JASA) by McIntyre, Woodhouse and Schumacher, reviewing a new science of numerical simulation. The paper concludes with two key points

The components of an instrument circuit, in general, are Feedback from 1) into 2) such that 1)'s round trip time governs the pitch of an oscillation.

Interesting characteristics from the simulations included


Snd includes a translation from `C' of Perry Cook's STK examples: brass, bow, flute. Bugle.scm is a script updating the brass example and casting it in a form with flexible time-varying controls -- the user can supply constants, envelopes, oscillators, etc. to the model parameters.

The bugle's two components are a tube and lip excitation. Like previous examples, the tube is a recirculating delay with filter, only it uses a delayl delayline (from prc95.scm) and a one-pole loop filter (from CLM).

(out) -> one-pole-filter -> delayl -> out

The excitation accepts two inputs: mouth pressure and bore pressure from the tube. It calculates the instantaneous difference, passes that through a non-linear function (square of the difference value) and then sends into the tube a proportion of mouth / bore pressure based on the non-linearity. In this way "back-pressure" in the tube interacts with the excitation. The lips are also a resonant system (the "Bronx Cheer" sound) and have a resonance frequency. The trick is to have that frequency partially a function of lip tension and partially a function of tube resonance. The excitation circuit accomplishes that by filtering with a biquad (formant filter from prc95.scm) that has settable center frequency. The filter is applied ahead of the non-linearity.

(breath - out) -> non-linearity -> tube -> out

...which expands to...

(breath - out) -> lip-filter -> square -> scale breath + out  -> one-pole-filter -> delayl -> out

Differences in instruments and instrument families are found in the types or excitation and the resonance circuits.

Bugle.scm also introduces defmacro for ease of forming template functions. The combination of defmacro, backquote and comma constructs allows easy abstracting of large pieces of code for reuse.