Common Music [Taube, 1990,Taube, 1998] is an object-oriented musical composition interface that bases its results in the definition of classes and objects that interact between them at the program level. CM is Free and it is updated regularly.
Common Music treats the composition process as an experimental process aimed at describing the sound and its higher-level structure. It has a number of composition tools as well as a public interface. It can be used in conjunction with many different existing protocols and languages such as MIDI, CSound, Common Lisp Music or Music Kit.
Common Music is implemented in Common Lisp and CLOS and runs on different platforms including PC, Macintosh, SGI, NeXT and SUN. Source code is publicly available.
Common Music structure is based on the separation of three different levels in the music composition process. On one level, the composer concentrates on developing musical ideas. On another level, the composer worries about how these ideas can be translated to the real world. An on the last level, the musician must understand how the composer's ideas have to be conceived. This separation allows the re-use of common higher level structures.
Common Music provides three different interaction modes that can act in parallel. The most basic way to interact with the system is through the program Lisp source code. This mode of interaction offers much flexibility to control algorithms but ignores many of the system utilities. The second mode implies working through the command interpreter, which translates text messages into system actions. The command interpreter in Common Music is called Stella. The main advantage of this mode is that it allows for flexible edition but, on the downside, the creation of complex commands results into very complex messages. And finally, the third interaction mode is through the use of a graphical interface called Capella that is only available for the Macintosh platform.
Common Music defines six kinds of collections, which can be specialized or enhanced by the user. The existing collections are: Thread, Merge, Heap, Algorithm, Network, and Layout. A Thread represents a line of events to be sequentially processed. A Merge represents parallel or multiple temporal command lines. A Heap is a collection that represents a random grouping that is converted into a temporal line after mixing its substructure and then processing it sequentially like a Thread. An Algorithm represents a program description, that is the temporal line of events is produced by calling a user-specified program. A Network is a collection that represents a user-defined order, the temporal line of events is produced by the call to a condition that can be expressed through a pattern or a function. Finally, a Layout refers to arbitrary chunks of an existing structure.
The act of translating the high-level information introduced by the user into a lower-level information understandable by the synthesizer is known as realization. This realization can happen at different levels and through two working modes: run-time and real-time. In the first mode, events receive a time tag but the clock advances as fast as it can. In the second mode the time tag is exactly that of the real time.
In Common Music, the final result depends both in the events and in the context. This context is known as stream and can include outputs such as Postscript or sound files or MIDI ports. All these different streams are controlled by the protocol that is in charge of taking the right actions depending on the current combination of events and stream.
Common Music has different procedures and classes that are designed to give support to the musical composition process. These tools include high-level macros to create musical structures, musical data representation or envelopes. The user can combine these functions with the functionality included in the Common Lisp programming language.