Thus far we have discussed the architecture of the environment and its
major classes for synthesis and composition. We have seen that the
environment can be used both for the composition and for the synthesis
of a piece. Much of the functionality of the architecture lies in the
use of an embedded Scheme interpreter. In addition, we propose to use
the environment in an interactive set-up. In that case the system has
to run in real-time. However, the interpreter and the synthesis task
have quite different requirements and time behavior. On the one hand,
the synthesis task is a real-time task. It requires a very
controllable usage of the system resources in order to guarantee a
correct behavior. On the other hand, the interpreter is very
erratic. Because of the complex network of dependencies between the
objects in the environment, the interpreter typically delegates the
task of freeing unused objects to a garbage collector. This makes the
runtime behavior of the interpreter very difficult to predict. Since
both tasks run in the same space, the interpreter may interfere with
the synthesizer causing its deadlines to be missed.
With our current prototype implementation, we offer soft real-time
performance. That is, the synthesizer runs fast enough for direct
output, but an occasional interruption may occur and cannot be
completely avoided. This is sufficient for studio work. However, if
we want the use such an integrated environment in critical situations
such as concerts and music installations it must be capable of hard
real-time performance.
In this chapter we will investigate two points:
- We will analyze whether hard real-time is possible at all in such an integrated environment. If this is not
possible, we will be forced to define a new architecture for
use in critical situations. If it is possible, we will point
out what is left to be done to make the current implementation
real-time.
- Independent of whether hard real-time is possible or
not, we can list a number of design decisions that will limit
the influence of the garbage collector on the real-time task.
We start in the next section with a short description of the
interaction between the main components of the system in runtime. In
this overview we will take the opportunity to highlight the different
stages in the life of a synthesis process. Then we will take a look at
the particular case of the interaction with the garbage collector (Section 1.2). We estimate the worst case
execution time of the synthesizer (Section
1.3). Finally, we discuss the real-time possibilities of the
architecture (Section 1.4).