Version 1 (Tim Place, 2010-04-04 12:01 pm)

1 1 Tim Place
h1. TheoryOfOperation
2 1 Tim Place
3 1 Tim Place
Jamoma Multicore is a layer for wrapping DSP (TTBlue) objects to be used in processing graphs. The implementation of Multicore is not tied to any particular environment, though it is readily adapted to real-time graphical environments. One practical implementation of Jamoma Multicore is for Cycling '74's Max.
4 1 Tim Place
5 1 Tim Place
h2. Building the DSP Graph
6 1 Tim Place
7 1 Tim Place
A Multicore graph consists of a collection of objects that are connected in such a way that they are able to perform digital signal processing tasks. Before such processing can occur, the connections of the graph must be established and the graph configured. This happens as a 3 step process:
8 1 Tim Place
9 1 Tim Place
# A 'reset' method is called on all Multicore objects in the graph. This tells all objects to forget any previous connections.
10 1 Tim Place
# A 'setup' method is called on all Multicore objects in the graph. This causes objects to establish connections to other objects in the graph (i.e. by passing a message to any object directly below themselves).
11 1 Tim Place
# An 'init' message is sent, initiated by any/all terminal Multicore objects in the graph and traversing up the graph as detailed below.
12 1 Tim Place
13 1 Tim Place
A terminal object is one that can be used as the final destination and is responsible for driving the entire graph that is connected to it. When this object calls the init method on any objects that are connected to it, they in-turn call the init method on any objects connected to them, etc., until the init method calls have been propagated to all objects in the chain. This init call is responsible for allocating memory for buffers required for the signals, etc.
14 1 Tim Place
15 1 Tim Place
h2. Processing the DSP Graph
16 1 Tim Place
17 1 Tim Place
* First, a 'preprocess' method is propagated up the chain from the terminal object.
18 1 Tim Place
* Second, the audio is pulled from the object above it in the chain, again initiated by the terminal object.