Skip to content

Melt-Hybrid Object


Creates a hybrid of two different objects. One can think of this hybrid, as its name implies, as one object that melts into another. With it, one can make a string turn into a membrane, or have a tube tuned to 220Hz turn into a tube tuned to 440Hz. In both cases the result is like a glissando, as opposed to mix-hybrid which does not change the objects themselves, but rather the energy that is transmitted to the two components of the hybrid.

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

Syntax and Default Values

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

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


The 'melt-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. Zero creates a hybrid exactly like object1, and one creates a hybrid exactly like object2. Thus .5 creates a hybrid which is halfway between the two objects, .6 creates a hybrid which is a little more like object2, etc...


A 'melt-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 plucked string glissando, before creating the hybrid, we need to create accesses for both objects at both the plucking 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 make a glissando between the two strings over two seconds):

(setq my-hybrid (make-object 'melt-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 'melt-hybrid can be used in any context where a regular access would be used.

Using a 'melt-hybrid this way to perform a glissando is more efficient than using (set-pitch ...) with an envelope controller.


There are no special options for this object. However, note that a 'melt-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.