Skip to content

Tri-Hybrid Object


Creates a tri-hybrid, which is essentially a mix-hybrid of three different objects. When exciting a tri-hybrid, energy is transmitted to the sub-objects in proportion to the values of the 2-dimensional controller. As with the mix-hybrid, when using a 'tri-hybrid with objects of three different pitches, one always hears the three distinct pitches.

(make-object 'tri-hybrid ... )

Syntax and Default Values

A 'tri-hybrid object can be created using the following Lisp syntax:

(make-object 'tri-hybrid object_reference1 object_reference2 object_reference3 2D-controller)


The 'tri-hybrid object does not have any physical parameters, but takes four arguments:

  • object_reference1: the name of one of the two instruments from which the hybrid is made.
  • object_reference2: the name of the second object.
  • object_reference3: the name of the third object.
  • 2D-controller: two-dimensional controller which controls the interpolation of the hybrid.

The controller should be a two-dimensional controller that outputs two values between zero and one.


A tri-hybrid is a special version of the mix-hybrid object. The two-dimensional controller should contain two values between 0 and 1. If both values are 0, any interaction energy will be transmitted to the first object, if the first value is 1 and the second is 0 energy will be transferred to the second object, if the first value is 0 and the second value is 1, energy will be sent to the third object. (Both values at 1 will send energy to the second and third objects. To help you visualize this, if you think of the first object as the center of a circle and the 2nd object as the circumference of that circle, the first controller controls the distance between the center and the edge of the circle. Now imagine the third object as existing along the circumference of another circle on a plane perpendicular to it - creating a sphere. The second controller is used to control the distance from the center of that circle to its edge.


A 'mix-hybrid can only be accessed using (make-tri-hybrid-access ...) However, to do this, you will need to first make accesses on the three objects from which the hybrid is derived, before actually creating the hybrid object itself! The function (make-tri-hybrid-access ...) will keep track of where the access actually is.

For example, if we are creating a 'tri-hybrid object where we will be exciting a hybrid string with a force controller, before creating the hybrid, we need to create accesses for all three objects at both the excitaation point and the sound output point on the string:

(setq my-string1 (make-object 'mono-string))
(setq my-string2 (make-object 'mono-string))
(setq my-string3 (make-object 'mono-string))
(set-pitch my-string1 'length 220.)
(set-pitch my-string2 'length 440.)
(set-pitch my-string3 'length 660.)
(setq my-str1-acc (make-access my-string1 (const .315) 'trans0))
(setq my-str2-acc (make-access my-string2 (const .315) 'trans0))
(setq my-str3-acc (make-access my-string3 (const .315) 'trans0))
(setq my-str1-out (make-access my-string1 (const .6) 'trans0))
(setq my-str2-out (make-access my-string2 (const .6) 'trans0))
(setq my-str3-out (make-access my-string3 (const .6) 'trans0))
Now we can safely create the hybrid object and its accesses (using an envelope controller to allow the excitation force to cross-fade between the strings over three seconds):

(setq my-hybrid (make-object 'tri-hybrid my-string1 my-string2 my-string3 (make-controller 'envelope 1 '((0 0. 0.) (2 1. 0.) (3 0. 1.)) )))
(setq my-hybrid-acc (make-tri-hybrid-access my-hybrid my-str1-acc my-str2-acc my-str3-acc))
(setq my-hybrid-out (make-tri-hybrid-access my-hybrid my-str1-out my-str2-out my-str3-out))
The hybrid accesses on our 'tri-hybrid can be used in any context where a regular access would be used.


There are no special options for this object. However, note that a 'tri-hybrid can not be saved to a file using (save-object ...), nor can its physical or modal information be obtained using the (get-info ...) command.