Filter / Resonator / Physical Modeling
modal() processes an excitation signal through a parallel bank of damped resonators. It is intended for struck, plucked, or scraped objects such as bells, plates, membranes, mallets, glass, and resonant acoustic bodies.
The second argument is normally X. Syntropy follows the pitch from that phase argument, so pitch bend, glide, transpose, sample rate, and oversampling remain consistent.
white(), pulses, clicks, or filtered noise work wellX0.5 is a harmonic series, values above 0.5 become increasingly stretched/inharmonic, and values below 0.5 compress the spectrum// harmonic struck bar 0.65*velolog()*attack(80)*release(48000)* modal(white()*fromtoin(1,0,140), X, 0.50, 0.36)
// inharmonic bell 0.55*velolog()*release(120000)* modal((white()+0.15*sin(9*X))*fromtoin(1,0,90), X, 0.82, 0.72)
// dark plate 0.70*release(70000)* modal(white()*fromtoin(1,0,260), 0.5*X, 0.36, 0.52)
// membrane / drum skin 0.85*release(24000)* modal((white()+0.35*squa(X))*fromtoin(1,0,80), 0.5*X, 0.28, 0.30)
Available since Syntropy version 2.2.
Several modal() calls can be used in one formula. Syntropy assigns independent runtime states automatically for up to 16 call sites per voice.
For realistic results, keep the excitation short. A continuous excitation can create organ-like resonant tones, while a short noise burst produces bells, plates, and struck-object decays.