A diagram for two coupled strings is given in [14].14A Faust template for this block diagram is displayed in Fig.12 and specified as follows:
import("music.lib"); g1 = 0.999; g2 = 0.995; P = 200; Pmax = 256; detune = 1; d1 = fdelay(Pmax,P-2); d2 = delay(Pmax,P*(1.0 - 0.01*detune)-2); bridgefilter = + : *(-0.5); g = g1; stringloop = ( _,+ : ((d2 <: _,_),(d1 <: _,_)) : (_, (bridgefilter <: _,_) ,_) : +,+) ~ (*(g2),*(g1)) ; process = stringloop;where P is the fundamental period, in samples, and denotes the round-trip filtering on the string during one period. (Placeholder values are given in the Faust listing so it will compile and generate Fig.12.)
Note that the excitation only enters one of the string loops in Fig.12. This corresponds, for example, to plucking the string in the horizontal plane, say (the d1 loop), with the vertical plane (d2 loop) vibrating ``sympathetically''. More generally, the two loops may be excited by varying amounts of the excitation signal, corresponding to a physically inexact excitation plane.
As discussed in
[14],
the bridgefilter is of the form
stringloop = (+ <: d2,d1 : + : *(0.5)) ~ *(g);This simplified coupling algorithm runs about twice as fast as the full algorithm (based on Faust benchmarks using the bench.cpp architecture file).