Skip to content

Mix-Hybrid Object


Creates a hybrid of two different objects. One can think of this hybrid more like a box with the two objects inside; in fact, it's sort of like a sound mix of the two objects, except that when exciting the hybrid, energy is transmitted to the sub-objects in proportion to the current position of the hybrid. When using a 'mix-hybrid with two objects of different pitches, one always hears the both distinct pitches (as opposed to the melt-hybrid, where you hear one varying pitch).

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

Syntax and Default Values

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

(make-object 'mix-hybrid object_reference1 object_reference2 controller)


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

  • object_reference1: the name of one of the two instruments from which the hybrid is made.
  • object_reference2: the name of the other object.
  • controller: one-dimensional controller which controls the interpolation of the hybrid.

The controller should output a value between zero and one. A value of zero causes the interaction energy to be transmitted to object1, and a value of one causes the interaction energy to be transmitted to object2. Thus .5 creates a hybrid in which the interaction energy is sent equallt to both objects, .6 creates a hybrid in which a little more of the interaction energy is sent to object2, etc...


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

For example, if we are creating a 'mix-hybrid object where we will be exciting the hybrid string with a force controller, before creating the hybrid, we need to create accesses for both 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))
(set-pitch my-string1 'length 220.)
(set-pitch my-string2 'length 440.)
(setq my-str1-acc (make-access my-string1 (const .315) 'trans0))
(setq my-str2-acc (make-access my-string2 (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))
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 two strings over two seconds):

(setq my-hybrid (make-object 'mix-hybrid my-string1 my-string2 (make-controller 'envelope 1 '((0 0.) (2 1.)) )))
(setq my-hybrid-acc (make-hybrid-access my-hybrid my-str1-acc my-str2-acc))
(setq my-hybrid-out (make-hybrid-access my-hybrid my-str1-out my-str2-out))
The hybrid accesses on our 'mix-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 'mix-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.