It was originally adapted from Perry Cook and Gary Scavone's STK, the Synthesis ToolKit for doing amazing physical model stuff.
Here's what Perry says about "Shakers":
PhOLIES (Physically-Oriented Library of Imitated Environmental Sounds) is a similar approach for the synthesis of environmental sounds. This class implements simulations of breaking sticks, crunchy snow (or not), a wrench, sandpaper, and more.
/* MSHAKERS - the "Shakers" physical model instrument in Perry Cook/Gary Scavone's "stk" (synthesis tookkit). p0 = output start time p1 = duration p2 = amplitude multiplier p3 = energy (0.0-1.0) p4 = decay (0.0-1.0) p5 = # of objects (0.0-1.0) p6 = resonance freq (0.0-1.0) p7 = instrument selection (0-22 -- see "instruments" file for listing) p8 = percent of signal to left output channel [optional, default is .5] */Sample scorefile #1:
rtsetparams(44100, 2) load("MSHAKERS") st = 0 numobjs = 0 for (i = 0; i < 20; i = i+1) { MSHAKERS(st, 0.5, 20000, 0.8, 0.8, numobjs, 0.1, 0) numobjs = numobjs + 0.05 st = st + 0.2 } st = st + 0.5 energy = 0 for (i = 0; i < 20; i = i+1) { MSHAKERS(st, 0.5, 20000, energy, 0.8, 0.5, 0.1, 0) energy = energy + 0.05 st = st + 0.2 } st = st + 0.5 decay = 0 for (i = 0; i < 20; i = i+1) { MSHAKERS(st, 0.5, 20000, 0.8, decay, 0.5, 0.1, 0) decay = decay + 0.05 st = st + 0.2 } st = st + 0.5 resofreq = 0 for (i = 0; i < 20; i = i+1) { MSHAKERS(st, 0.5, 20000, 0.8, 0.8, 0.5, resofreq, 0) resofreq = resofreq + 0.05 st = st + 0.2 }Sample scorefile #2:
rtsetparams(44100, 2) load("MSHAKERS") t = 0 inst = 0 for (j = 0; j < 23; j = j+1) { for (i = 0; i < 20; i = i+1) { MSHAKERS(st, 0.5, 20000, 0.9, 0.8, 0.5, 0.7, inst) numobjs = numobjs + 0.05 st = st + 0.2 } inst = inst + 1 }