Trace: » technical_overview
Overview
Integra is based on the principle of modularised DSP and dataflow. An Integra module is data or signal processing component that may be connected to other Integra modules to form a module collection.
To facilitate this, Integra provides the following:
- An XML schema that defines the storage of module definitions, collections of modules, module state and data about musical works in XML files
- A database schema that defines the storage of module definitions, collections of modules, module state and data about musical works in an ORDBMS
- A namespace protocol that defines how data should be communicated between modules and collections of modules
In addition to this Integra provides an implementation that uses these components in the form of:
- A graphical user interface for working with Integra modules using an OSC implementation of the namespace
- A module database that provides implementations of Integra modules for a variety of environments
- A web accessible database instance that contains the module database and data about musical works
- A C library that provides base functionality for software supporting the Integra standard
Integra Modules
The attributes of an Integra module are stored using a module definition construct. Module definitions do not encode the core DSP functionality, but simply provide an interface to the functionality along with a reference to an implementation. For example, a sinus module definition might define an interface that consists of 'amplitude', 'frequency' and 'phase' parameters, along with a reference to an environment-specific (e.g. Supercollider, Max/MSP, PD) 'patch' that provides an actual implementation of the module. The module definition also defines the ranges and types of the module's attributes.
Integra Class hierarchy
Integra modules are conceived in an object-oriented manner. That is, it is possible for one module to inherit the interface of another module. Since, not everything Integra deals with is an Integra module, the more abstract concept of 'Integra classes' has been defined. Modules can be thought of as existing below a specific node in a hierarchy of classes that relate to a musical work. For example, Integra classes can be used to define the attributes of modules, musical works, composers, performers and module collections.
Integra components
GUI
The Integra GUI is the means by which users interact with the Integra system. A prototype is currently being developed in Max/MSP with extensive use of JSUI/javascript. It provides a DAW-style timeline functionality, a range of widgets for parameter control, and a DSP network editor. The GUI itself doesn't provide any DSP functionality, it interacts with the rest of the system via OSC and the Integra library.
Database
The database provides online storage for Integra modules, module collections, documentation, and other data about musical works. A web-based UI for the database is provided for uploading and downloading data, as well as defining modules and other Integra classes. A Postgresql database has been used for its stability, excellent documentation, and advanced feature set. The web UI is written in Python and utilizes bindings to the Integra library.
XML storage
XML is used as a means of offline storage of modules, module collections, documentation and other data about musical works. The Integra library includes a parser for these files. XSLT is used alongside bespoke translators to provide output to a range of appropriate targets.
Integra library
The Integra library provides the glue to connect the various elements of the Integra system. It can work in either client or server mode, enabling it to be utilised by the database server, or in a host environment on the User's local machine. XML-RPC is used for direct to server connectivity, and OSC is used for communication between multiple 'client' instances. On the server the library provides functionality for generating valid XML output from database data. On the client the library can read in the XML data, and instantiate Integra modules in the target environment. The library is written in C/C++, and is currently being prototyped with Max/MSP as a target.