Jamoma Core C++ Library
Jamoma Core is a C++ platform for building dynamic and reflexive systems with an emphasis on audio and media.
Jamoma Core serves as the backbone for the Max and PureData implementations of Jamoma. Additional implementations can be envisaged, e.g. a Jamoma addon for openFrameworks, a Jamoma module for Unity 3D, stand-alone applications for computers or mobile devices, AudioUnit and VST plugins, and Ruby implementations.
Jamoma Core makes extensive use of automated unit testing, as detailed in a paper by Tim Place et. al. It is released according to the permissive New BSD License, and can be used for open-source as well as commersial and closed-source development.
A layered framework
The layered framework architecture creates an object model and then specializes that object model for audio and matrix processing, as well as system automation, management and scoring.
Jamoma makes use of polymorphic typing, dynamic binding, and introspection to create a cross-platform API pulling ideas from languages such as Smalltalk and Objective-C while remaining within the bounds of the portable and cross-platform C++ context.
Jamoma Foundation provides low-level support, base classes, and communication systems. It serves as a runtime and API implementing a light-weight, dynamically bound, reflective object-oriented architecture layer on top of C++.
The DataspaceLib extension enables common media processing values such as time, gain and spatial positions to be set using various measurement units and coordinate systems interchangeably. This way gain values can be described using decibels or linear amplitude, and positions can be described using Cartesian or spherical coordinates.
Jamoma DSP specializes the Foundation classes to provide a framework for creating a library of unit generators for audio processing.
A wide range of units are implemented for common audio processing purposes in a series of extensions. This includes signal generators, audio effects, filters, Fourier transforms and windowing functions for granular and spectral processing.
Common easing functions are available for gradual transitions of values at control or audio rate.
Jamoma DSP is further documented in a paper by Tim Place et. al.
Jamoma Graph networks Jamoma Foundation based objects into graph structures, providing a basic asynchronous processing model for objects (nodes) in the graph structure.
An extension enables MIDI messages to be passed as dictionaries between graph nodes.
Jamoma Audio Graph
Jamoma Audio Graph extends and specializes the Jamoma Graph layer. It provides the ability to create and network Jamoma DSP objects into dynamic graph structures for synchronous audio processing.
The audio graph can pass multi-channel audio signals between nodes, and the nodes can themselves process multi-channel audio. As such Jamoma Audio Graph is particularly well-suited for spatial audio processing.
AudioGraph is further documented in a paper by Tim Place et. al.
Jamoma Modular is a framework for assembling high-level interactive modular systems. It provides a structured approach to modular development, with clear model-view-controller (MVC) seperation.
Node parameters are implemented with a set of amenities including type checking, description of range and range boundary behavior, dataspace conversion, and easing to new values. Models and parameters are organisied into a structured namespace, and this node tree can be queried and addressed remotely. This way the system can be controlled in advanced way using e.g., presets, mappings, or cues.
Jamoma Modular is further documented in a paper by Theo de la Hogue et. al.
Header-only library (in progress)
A new version of the Jamoma C++ libraries is currently in development. This will be a header-only C++ library for building dynamic and reflexive systems with an emphasis on audio and media.