PatchWork is a tool for computer-assisted composition, although it can be used also as a general purpose programming tool. At the time of writing PW has attracted more than 200 registered users. Among these are individuals with highly diverse musical and aesthetic backgrounds, including among others Jean Baptiste Barrière, Marc-André Dalbavie, Brian Ferneyhough, Paavo Heininen, Magnus Lindberg, Tristan Murail and Kaija Saariaho.

PatchWork was conceived by Mikael Laurson in 1985-1986. Soon afterwards a close collaboration started with IRCAM (with Jaques Duthen and Camilo Rueda) which resulted in the first PW release in 1993.

PW provides a graphical interface to Lisp. Any Lisp function can be translated to a graphically operable box. The programming syntax consists of making connections between boxes.

The kernel part of PW (PW-kernel) contains an extensive library of predefined boxes. PW-kernel is musically neutral in the sense that it does not make assumptions about what kind of music or musical raw material is to be produced or analysed with it. The main aim is to give the user basic tools for visual programming and to provide a straightforward correspondence with the base languages, Common Lisp and CLOS.

PW-kernel also provides a library of basic musical objects, such as note, chord, chord-sequence, beat, measure, measure-sequence, etc. For each type of musical object there is a specialised editor. Editors have a central role in PW as they allow the user to inspect and modify the various musical objects.

The figure below shows a typical PW window (called a "patch") with boxes, connections and editors.

A PW patch by Tristan Murail.The patch generates a sequence of chords where the first chord is based on overtone series and the rest are distorted versions of the first.


In order to prevent PW from being just a fixed collection of predefined libraries of compositional algorithms, special attention has been paid to the smooth interaction between PW and its base languages. The aim is to make it possible for the user to easily extend PW with private libraries. Such extensions, called user libraries, are modular software packages that can be loaded into PW. In contrast to PW-kernel, user libraries are designed to solve specific musical problems. PW contains an extensive set of user libraries ranging from packages dealing with spectral music, stochastic music, rule-based programming, rhythmical processes and sound synthesis.


The next example comes from a PW user library called Viuhka (designed for and based on ideas by Paavo Heininen). Viuhka (Finnish, in English 'Fan', in French 'Éventail') is used to create complex, multi-layered musical textures:

A Viuhka patch by Paavo Heininen. This patch utilises break-point functions that constitute the pitch field (harmonic skeleton) of the result. The resulting texture is shown below the patch window in a piano roll editor.


The figure below gives an example of how rule-based programming can be used in PW. This patch is realised using a PW user library called PWConstraints. In rule-based programming the user writes rules to describe the end result from many different points of view. This approach allows to specify complex musical relations that define the melodic, harmonic and voice-leading properties of the result.


A PWConstraints patch by Magnus Lindberg. The patch fills the pitch information of a input score according to the rules given by the user (the rules are seen in the text-editor). The input score defines the rhythmic structure of the result and is prepared in advance by the composer.


PWConstraints can also be used to create rhythmic textures. The next figure gives the beginning of a result that mimics the style of György Ligeti:

A texture result. The score was produced using PWConstraints rules that disallow downbeat beats and allow only one-note attacks (the first measure is an exception). Other rules control the exceptional status of measure one, the density of attacks and how rests are positioned in the resulting texture.



Further information on PW and PW user libraries can be found in the following sites:

Mikael Laurson Homepage

Sounding Score Homepage