In this text we present an integrated environment for computer
music. Our system integrates a high-level Scheme interpreter, a
real-time synthesizer, and a rich framework for temporal composition
and sound synthesis. The environment is entirely written in the Java
programming language and can be used in distributed applications.
Three aspects of computer music that are generally treated separately
- composition, sound synthesis, and interactivity - are tightly
integrated in this environment.
The embedded Scheme interpreter offers an interactive programming
environment. We show how the underlying Java platform promotes a
transparent use of functional Scheme objects throughout the
system. These functional objects, which we called programs, are
used to describe the complex behaviors of the system. The events, for
example, carry with them a program to describe their actions.
The compositional structures organize both discrete elements and
continuous control functions in a hierarchical structure.
Compositions thus become complex descriptions that control the sound
synthesis. The basic element of temporal composition is the activity.
Patterns organize activities in time and maintain the
temporal relations between them. Changes to the organization are
updated incrementally. This resembles the techniques of constraint
propagation found in graphical interfaces. Causal relations can be
used to describe the organization of activities of unknown duration.
The basic unit of sound generation is called a synthesis
process. They are created with a meta-class approach using synthesis techniques and synthesis voices. Synthesis processes
are aware of the time relations defined in the composition. This time
information is bundled in an object called time context.
Synthesis processes can use this information to deform the real time
displayed by the synthesizer.
The environment concurrently handles the Scheme interaction, the
garbage collection, and the real-time synthesis. We investigate
whether hard real-time can be guaranteed in such a dynamic
environment. It is difficult to conclude on the question solely on the
basis of the discussions found in the literature. However, we
introduce a constraint on the synthesis processes that reduces the
question to the scheduling problem of concurrent tasks.