Skip to content

Reed Connection


Makes a reed-tube interaction.

Syntax and Default Values

The 'reed connection can be created using the following Lisp, mlys (Max) or mlys.lua syntax:

(make-connection 'reed

[mlys.reed @name MyReed
           @initial-position-in 0.001
           @airdensity 1.2
           @area 1e-8
           @length 0.01
           @weight 1]
The first (and only) inlet is to be connected to the reed object (generally a The first and only outlet is to be connected to the sounding object (generally a tube such as mlys.closed-open-tube).

💡airpressure, airdensity, readarea, aperturelength and weight can be controlled via Max messages with:
MyReed@airpressure {value}
MyReed@airdensity {value}
MyReed@readarea {value}
MyReed@aperturelength {value}
MyReed@weight {value}

                          tubeaccess=<reference of access on tube>,
                          reedaccess=<reference of access on reed>,
💡For airpressure, airdensity, readarea, aperturelength or weight, if a value is passed, a dynamic controller is created, controllable via Max messages:
MyReed@airpressure {value}
MyReed@airdensity {value}
MyReed@readarea {value}
MyReed@aperturelength {value}
MyReed@weight {value}


The 'reed connection takes eight arguments:

  • tubeAccess: the access on the object used as a tube.
  • reedAccess: the access on the object that will be used as a reed.
  • initialPosition: the initial position of the reed with respect to the tube. (a numerical value)
  • airPressure: breath pressure - the pressure of the air before exciting the reed.
  • airDensity: a controller for the density of air.
  • reedArea: the surface area of the reed.
  • apertureLength: the width of the reed.
  • weight: (optional) controller weighing the interaction.

The object used as a reed is commonly a bi-two-mass, but it could be any other Modalys object.

The initial position of the reed with respect to the tube - it is typically a small value, around 1 mm. This is provided as a numerical value, not a controller.

The object used as a tube is commonly a closed-open-tube, but feel free to experiment!

The remaining parameters are controllers:

The breath pressure of the air just before hitting the reed. Typical values: from 0 to 50000 Pa

For the air density controller, the usual value for the volumic mass of air is 1.2 kg / m3, however you might need to play with this if you wish to blow into Modalys objects other than air columns (the various tubes).

Typical values for the reed area controller are from 1e-14 to 1e-3 m2. This value is unrelated whatsoever to the physical values used when defining the reed object. It is up to you to match them or not.

The aperture length controller controls the vibrating width of the reed. A typical value is around 2.76e^-4, although this may need to be changed when experimenting with uncommon objects.

The weight controller is optional. If not provided, it defaults to 1.


The reed connection simulates most of the mouthpiece of a typical single-reed instrument. You need an access to serve as the reed tip, an access to serve as the top of the acoustic tube, and the reed connection supplies all else, simulating a “virtual mouthpiece” that the reed can bang against, simulating the effects of blowing, etc.

Because the 'reed connection cannot access the base of the reed by itself, you must make a separate position connection to “clamp” the base of the reed in place; so it is necessary to make a position connection, with a position controller fixed at zero. (see example 3).


Appropriate Objects to Use as Reeds

The frequency of oscillation of the reed is calculated according to the formula:


or in Lisp:

(/ (sqrt (/ 200 .000002)) (* 2 pi))
Typical reed frequencies are above 1500 Hz. If we use a two-mass object as a reed, using a mass (m) value of 2e^-6 and stiffness (k) of 200 we obtain an appropriate frequency of 1591.55, so the following two-mass object is an appropriate starting point for use as a reed:

(setq my-reed (make-object 'mono-two-mass
         (small-mass .000002)
         (large-mass .000002)
         (stiffness0 200)
         (const-loss0 60)
         (freq-loss0 260) ))
The access on the reed which will be connected to the acoustic tube is generally on the large mass, although in the example above, both masses are of equal size:

(setq my-reed-tip (make-access my-reed (const 1) 'trans0))
When using a two-mass, you also need to set the other mass to a fixed position so it does not move away:

(setq my-reed-base (make-access my-reed (const 0) 'trans0))
(make-connection 'position my-reed-base (const 0))
Alternately, you can also use a harmonic oscillator in place of a two-mass object. Since the harmonic oscillator (a mono-one-mass) it is already fixed at one end, you do not need to to use a position connection to fix the other end of the reed as an immobile point (as we do when using a two-mass):

(setq my-reed (make-object 'harmonic-oscillator
         (mass .000002)
         (stiffness 200)
         (const-loss 60)
         (freq-loss 260)))
And for the access:

(setq my-reed-tip (make-access my-reed (const 1) 'normal))
Another option would be to use a very small rectangular plate as a reed. Appropriate values that you can use as a starting point are:

(setq my-reed (make-object 'rect-plate
         (modes 5)
         (length0 .7e-2)
         (length1 2e-2)
         (thickness 2e-5)
         (density 700)
         (freq-loss 400)
         (const-loss 200) ))
Accesses on this plate will need to be away from the edges of the plate, which are fixed:

(setq my-reed-tip (make-access my-reed (const .1 .2) 'normal))
Note that, as with the harmonic oscillator, because the plate is fixed at its edges, you do not need to secure it with a position connection as you do the two-mass object.


When updating (very) old Modalys Lisp scripts, the air pressure controller values used may need to be increased in range, due to corrections made to this connection.

★     ★