Any string or rod, fixed at its endpoints, that vibrates in one transverse (side-to-side) direction.
(make-object 'mono-string
(modes 40)
(length 1)
(tension 100)
(density 1000)
(radius .001)
(young 1e9)
(freq-loss 1)
(const-loss 1))
testing astrolabe
optimization
purple
belated
chloroform okapi bingo finalist mechanism charcoal dwarf-star-alloy
The arguments for the physical parameters can be either numerical values or Modalys controllers (either dynamic or constant). If a given parameter is not supplied when using the Lisp syntax, the default parameter value will be used.
A mono-string can be accessed in one dimension - the trans0 dimension:
(make-access my-string my-controller 'trans0)
or
(make-access my-string my-controller 'trans0)
(but it does not let us indent.... hrrrrr...)
or
(make-access my-string my-controller 'trans0)
This makes a side-to-side access at a point along the length of my-string, specified by my-controller. The value of my-controller must be between zero and one. (As the string is "fixed" at its endpoints, the actual values 0 and 1 cannot be used.) For reasons of simplicity, we can consider trans0 to be the horizontal direction, but this side-to-side vibrational direction of the mono-string could be connected to a different direction on another object (such as the up-and-down direction of a bi-string), so the trans0 label is a handy way of referring to this without specifying an actual real-world spatial direction of movement.
The physical parameters can optionally be controllers instead of numerical values. Therefore, it is possible to modify the physical characteristics of an object, including its pitch, during synthesis. The following example creates a string which varies in length from 1 meter to 50 cm in 2 seconds:
(setq my-ctrl (make-controller 'envelope 1 '((0 1.0) (2 0.5)) ))
(make-object 'mono-string (length my-ctrl))
A mono-string can be tuned to a specific pitch, using the (set-pitch ...) function, by adjusting one of the following physical parameters:
For example:
(setq my-string (make-object 'mono-string))
(set-pitch my-string 'length 330)
You could also use a controller to re-adjust the pitch dynamically, however this is extremely costly in terms of CPU usage, since the entire modal object must be re-computed for every sample. The following example makes a glissando from 220Hz to 440Hz over 2 seconds:
(setq my-string (make-object 'mono-string))
(set-pitch my-string 'length (make-controller 'envelope 1 '((0 220.) (2 440.)) ))
Because of the intense amount of calculation required to compute an object based on a given pitch, hybrid objects can be used as a far more efficient way of making a continuous pitch change (glissando).
When using Modalys in real-time contexts, you can use messages to change the pitch of an object, instead of input signal controllers.
Modalys Tutorial Example [examples coming soon!]