Conceptually, AFL maintains one local and one global state in program variables *current-total-audio-state* and *global-total-audio-state*. Since it is easier to think of speech and non-speech audio separately, we treat these as named component subspaces with their own state variables. Variables *global-speech-state* and *current-speech-state* are really components of these states, so that the fully qualified references to these variables are
[displaymath5586]
and
[displaymath5587]
The names of these fields provide the external interface to the individual components.
We now describe how components are combined to form the total audio space. The AFL block is now extended to work in the total audio space; it introduces a local variable *current-[tex2html_wrap5596]* for each of the components.
Assignment statements
[displaymath5588]
and
[displaymath5589]
assign the value of expression point to AFL state variables. The type of point determines the component state variable that will be set. Hence, if there are several component spaces of a given type, e.g., several speech components, the fully qualified name of the state variable must also be given, as in
[displaymath5590]
AFL assignment statements are implemented as generic functions. The space-specific methods on the assignment statements perform the following steps:
Adding a component space requires some work but can be done easily by someone familiar with the implementation. To add a new component space: