2.2 Scream Engine
Scream is an engine that provides services to all
executing modules. For instance there is only one
clock/scheduler that is shared between all executing
modules. This allows accurate event scheduling to occur on
a regular basis without interruption. Another subsystem that
is shared between all modules is MIDI. Data models from
any module may register to receive MIDI events that are
dispersed from a central interface. A further Scream
subsystem is the lag and modulation engine. Most Scream
controls may be lag enabled or connected to modulation
sources such as various LFO waveforms. The ScreamGraph
component pictured in Figure 1 is used for spatial data, but
also can be used as a complex geometric
oscillator/modulation source.
On the API side for developers Scream integrates
functionality such as loading and saving state automatically.
Developers do not need to worry on how to implement
load/save functionality when the Scream component library
is used to construct new software.
One of the most compelling features of Scream is its
component orientation. Scream utilizes a plugin engine that
facilitates extensibility. All Scream modules are essentially
plugins that utilize the functionality of the Scream engine.
There is a lot of freedom in designing a new audio system.
Unlike other audio tools where plugins are basically limited
to audio effects or instruments, each component in Scream
may define its own plugin interface. An example of a
current Scream component that utilizes five different types
of plugins is the ScreamGraph component. ScreamGraph
plugins include generators (parametric math, polar, splines,
etc.), transforms (image processing on the resulting
generated geometry), positional plugins, time movement
(linear time, random, brownian), and data filters.
Data filtering is an interesting aspect of Scream
components. A generic component may have a data filter
attached to its output. The ScreamGraph component
includes data filters to translate graph coordinates to the
proper format for SC3s ambisonic spatialization
functionality. On the fly coordinate data is transformed into
amplitude and angular data.
3 Current Scream Progress
Fulltime development of Scream commenced in April
2003. I have overcome most of the major development
issues to providing a high performance environment for
Scream. Most of my work has been focused on the Scream
engine itself, but presently (February 2004) there are three
completed applications available. The first application is a
granular sampler. This application allows the loading of
sample data into SC3 from local files or over the network
and enables the user to scan (forwards/backwards), alter the
sampling rate, pitch shift, and define an envelope applied to
the sample. The second application is an ambisonic mixer
utilizing the 1st order b-format functionality available in
SC3 which is suitable for spatializing audio on a 2D plane
with N-speakers. The final application is a combination of
the previous two, the AmbiGranusampler which enables the
Granusampler with ambisonic spatialization.
Scream was used for a large scale installation at Burning
Man during August 2003. The Sol System collective
constructed an eight point sound array erected around a 120'
diameter circle. Each point was an 5' by 10' full range stack
of speakers. This was a perfect setup to utilize the Scream
ambisonic spatial mixer and it sounded amazing on the open
desert with no confined space causing reflections.
rliguilt~. l3ui 1 YSLtiI 0 Uclllllltl SuUIIi atlnlay tL DUPllllg IVitall LUJ
(picture by: Andrew Poison)
4 Future Scream Development
Work on the Scream engine continues rapidly. Core
engine functionality will be well defined, implemented, and
tested by summer 2004. This functionality includes an IDE
editor and compiler for SC3 synth definitions. Beyond
Scream engine development the standard component library
will be extended. These extensions include further modular
environments such as a standard mixer that maps to SC3
functionality. Other components will include 3D
graphics/spatialization tools. Eventually, 2nd and 3rd order
ambisonic plugins will also be developed making
Scream/SC3 capable of controlling a large scale speaker
array setup in a 3D arrangement.
4.1 Middleware Integration
Scream will integrate with various middleware software
available on the Java platform. In particular Scream will
integrate with the Xith3D and OpenMind 3D scene graph
engines, JavaODE physics bindings to ODE (Open
Dynamics Engine), the SimBionic AI engine, and JMSL.
4.2 Domain Specific Language Integration
With OpenGL 1.5 support and beyond Scream will
utilize OGLSL (OpenGL Shading Language). OGLSL is a
domain specific language (DSL) oriented towards extending
the fixed hardware pipeline of modern accelerated graphics
cards with programmable functionality called shaders.
Proceedings ICMC 2004