Arno is a program for computer assisted composition which extends Common
Music (CM) by means of constraints programming using Screamer.
Constraints programming allows a composer to synthesize a score by describing
it. The composer defines the constraints, in other words, the properties
which the result of the program must fulfil. The program searches
for a solution to satisfy the given constraints. Constraints programming
thus frees the composer to concentrate on what he wants to do musically.
The how is left to the computer.

The composer can describe the desired musical result from various viewpoints
on the score such as --- traditionally speaking --- harmony, voiceleading
or instrumentation. Arno does not however bind the composer to any
specific musical style.

In Arno the desired content of a CM container can be declared nondeterministically
using finite domains. For all parameters of the CM elements in that
container a finite domain (instead of single values) can be declared,
including the rhythm, the note, or any sound synthesis parameter.
Any domain can contain any values or even expressions. After the program
search, each parameter of each CM element is bound with one value
of its domain which fulfils all its constraints. Hierarchic structures
of CM containers in containers can also be declared. 

In Arno, constraints are expressed as predicates which test one CM
object. Various functions are defined to easily express relations
between objects. Functions exist, for example, to reach all predecessors
of an object (in the same CM thread), or to reach all simultaneous
objects (in the same CM merge). Further relationships can be defined
using the CM API. These relationships can be constrained using any
parameter of the objects.

The program performs a backtracking search. Heuristics for value ordering
in the domain can also be used. For the sake of performance, backjumping
has been implemented. A dynamic CSP variable order is projected.



Arno is the result of my diploma thesis. I did it mainly for my own work, 
but if someone else may need it... 

The software is provided "AS IS" and any express or implied warranties, 
including, but not limited to, the implied warranties of fitness for a 
particular purpose are disclaimed.


Torsten Anders
