FORMES [Rodet and Cointe, 1984,Rodet and Cointe, 1991] was an interactive system developed in VLisp first intended for Musical Composition and Synthesis. But due to its architecture and flexibility it found applications in areas such as speech synthesis or graphics animation. FORMES is currently discontinued but its design has influenced the frameworks that have been designed thereafter.
The main goals of FORMES were: generality; universality; independence from a particular synthesis technique; compatibility, models compatible in any context; simplicity of program text; ease of use; modularity; and hierarchical construction.
In FORMES time-dependent objects are called processes, built from sub-objects called offspring. A FORMES process groups rules (procedure bodies), a monitor (a kind of scheduler), and environment (local variables) and offspring (or children). A process has the ability to ``sleep'', ``wakeup'', ``wait'' and ``synchronize'' when asked.
The role of each process is to ensure the calculation of a particular musical characteristic. This calculation takes place during a precise duration called span, from a begin time (btime) and an end time (etime). These times, though do not need to be explicitly specified. Computation is accomplished through rules in the process environment.
A process is defined by instantiating an original process called generator. New processes can be defined from this original one by deriving from it and adding features. A process may be built from subparts, themselves built from subparts an so on. Therefore a process can have children and a parent. The structure in which processes are organized can be represented as a tree.
FORMES programs and commands can be prepared in files and then loaded or typed on-line. A FORMES program is a structure of processes and the execution involves the repetition of the following two steps: (1) update the list of rules that make the calculation tree and (2) execute or evaluate the rules.
Users communicate with processes by passing or sending messages whenever they want to query a process on its nature, state, or capabilities or they want it to do something. The user of FORMES can compose by connecting already existing objects or by defining new processes. All this is done in Lisp.
A monitor defines a temporal control structure. The monitor of a process is the scheduler of its children. The monitor has three tasks: (1) Determine the start time (btime) for each child and start it; (2) Update the calculation tree when the state of the process is modified; (3) If possible, determine the duration of the process