Skip to content

Bow Connection


Two-dimensional bowed connection between four accesses.

(make-connection 'bow ... )

Syntax and Default Values

The 'bow connection can be created using the following Lisp syntax:

(make-connection 'bow bow_acc_V bow_acc_H bow-posV str_acc_V str_acc_H str-posV 4D_ctl weight)


The 'bow connection takes eight arguments:

  • bow_acc_V: vertical access on object used as a bow.
  • bow_acc_H: horizontal access on object used as a bow.
  • bow-posV: initial vertical position of the bowing object's access. (numerical value, not a controller)
  • str_acc_V: vertical access on object to be bowed.
  • str_acc_H: horizontal access on object to be bowed.
  • str-posV: initial vertical position of the plucked object's access. (numerical value, not a controller)
  • 4D_ctl: four-dimensional controller containing coefficients which simulate the effect of bow rosin.
  • weight: (optional) controller weighing the interaction.

The two initial vertical positions must be numerical values, not controllers. The weight controller is optional. If not provided, it defaults to 1.

The 4D_controller is a four-dimensional controller containing coefficients which simulate the effect of bow rosin. A constant controller with standard suggested values is: (const 2 10 5 4). The meaning of these is discussed below.


The best way to understand this is to read the code for ex6.mos (Example 6). This connection assumes a bi-directional bowing object and a bi-directional bowed object. The “vertical” axis on both objects will be used to determine the downward pressure of the bow on the string, and the “horizontal” axis on both objects will be used to determine the relative speeds of the two objects.

Apart from bowed strings, it can be interesting to bow other things too. To bow a membrane, one could use a normal access on the membrane as the “horizontal” direction, and for the vertical direction, one could use a totally different object for to be bowed...

This connection is extraordinarily delicate; pushing a bit too hard or using the wrong kind of string can ruin the sound. Furthermore, as with real-life bowed objects, the force and speed needed to excite different kinds of objects changes drastically from object to object.

The 4D controller that simulates the effect of rosin contains four coefficients that do not relate to the physical parameters of rosin, but that are rather used to define a curve (actually, just three line segments that act as a simplified curve), for force vs. speed. This simplified curve is used to determine the stick and slip action of the bow. We suggest you start out using the four standard values 2 10 5 4 when bowing strings. However, if you want to experiment, you can refer to the following sets of parameter values as a guideline:

  • 10 30 17 0.5 - extremely slippery: very light and airy bow interaction
  • 5 20 10 1
  • 4 15 8 2 - light / airy bow interaction
  • 3 12 6 3
  • 2 10 5 4 - "standard" bow interaction parameters
  • 1.6 8 4 5
  • 1.3 6 3 8 - scratchy / sticky bow interaction
  • 1.0 5 2.5 12
  • 0.5 4 2.25 40 - extremely sticky and harsh: highly scratchy bow interaction

As you can see, the sets of parameters are organized, top to bottom, from those which result in a very light and airy sounding bow interaction, to those which result in a heavy/harsh and scratchy bow interaction. The unlabeled parameters are intermediate values. Using a value of 10, or near 10, for the second parameter in any of the above will smooth out the slope of the curve (it affects the middle line segment that approximates the curve).

The values 3 7 6 3 are nice parameters for a slightly lighter sounding bow interaction than is obtained with the standard settings.

When bowing objects other than strings, you may need to make some adjustments to the parameters.


Bowing Mono-Directional Objects

Since the bow interaction is designed to work with bi-directional objects, if you want to bow a mono-directional object, you need to create a “dummy” object for the vertical access. Basically, a bi-string is made up of two mono strings, one that vibrates in the horizontal direction and the other in the vertical direction as far as the user is concerned (even though for Modalys these are just 'trans0 and 'trans1). As an experiment you can try creating two mono-string objects and using one of them for the vertical access and the other for the horizontal access. As long as you listen to the string that is being used as the horizontal access (this is the one receiving the speed of the bow interaction), it should sound the same as using a bi-string.

Therefore, when bowing an object such as a membrane an air-column (which each have only one direction of possible access), you will need to create a second object, such as a string, on which to make the vertical access for the bow interaction.


In older versions of Modalys, the arguments were provided in a slightly different order:

(make-connection 'bow bow_acc_V bow_acc_H str_acc_V str_acc_H bow-posV str-posV 4D_controller)
You may need to update this connection to the new syntax if you come across any very old Modalys files.
★     ★