Trace: » technical_overview
Overview
Integra provides a framework for sustainable and usable live electronics. It does this by implementing the Model, View, Controller (MVC) design pattern to separate runtime state and interface data from implementation details.
The current implementation of the framework (shown above), uses Pure Data as a 'backend' for audio and data processing, and the Integra server (libIntegra) runs in the same process as Pd via a Pd external, which acts as a lightweight wrapper and 'listener' for passing data back to the server via a callback mechanism.
Integra Modules
An Integra module can be thought of as a self-contained unit for performing some useful function! There is no limit on module complexity or simplicity, so one module could perform a simple addition operation on an audio signal and another module could emulate a DX7 synthesiser. In Integra, a module's definition and state are abstracted from its implementation, that is, as technology changes, so to can a module's implementation, whilst its interface remains constant.
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 delay module definition might define an interface that consists of 'delayTime' and 'feedback' 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.
An example module definition in YAML is as follows:
definition:
name: TapDelay
label: Tap Delay
tags: [fx, delay, simple]
documentation:
title: 'Delay wikipedia article'
href: 'http://en.wikipedia.org/wiki/Delay_(audio_effect)'
description: 'General article about digital delays'
core: true
instantiable: true
parent: Delay
description: ~
attributes:
- name: feedback
description: ~
scope: state
type: float
unit: ~
scale: percent
minimum: 0.
maximum: 100.
default: 50
undoable: true
legalvalues: ~
valuelabels: ~
control: Knob
controlattribute: value
controlgroup: ~
Notice that TapDelay has no 'delayTime' attribute because this attribute is inherited from its parent 'Delay'.
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 GUI is currently being developed in Adobe AIR, meaning that it works on Windows OS X and Windows and has the potential to run in a web browser. It provides an arrange view for musical composition, a live view for musical performance, a range of widgets for parameter control, and a DSP network editor. Note that the GUI itself doesn't provide any DSP functionality, it acts as an XMLRPC client to the libIntegra server.
The XMLRPC protocol used between Integra clients and the libIntegra server can be found at http://www.integralive.org/api.html
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 uses the TurboGears 2 framework. The database can be accessed via http://db.integralive.org.
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.
libIntegra
The Integra library provides an abstraction layer between the 'module host' and external clients such as the Integra GUI. It is written in ISO C99 and aims to be simple and lightweight as possible with minimal dependencies.
The Integra server API, is mirrored by the XMLRPC API, providing the access to the underlying functions.
libIntegra API documentation can be found at http://integralive.sf.net

