At the time of this writing, around 300 C++ classes (70.000 loc) exist in our CVS repository.
CLAM brings the world of software design and engineering to DSP developers who could care less about it. For doing so, it offers some general infrastructure like ADT's, XML serialization or a GUI module. But, most importantly, it forces users to follow some good coding principles and it provides a general model for easy (re)usability. Thus, the user of the framework only has to concentrate on writing signal processing algorithms and, eventually, modeling new data structures or implementing particular flow control schemes.
CLAM offers a repository of ready-to-use components that conform the black-box aspect of the framework. These components include containers for data related to signal processing data and algorithms properly encapsulated. But, most importantly, CLAM also includes infrastructure for adding newly developed components that can be easily integrated into the framework. This white-box aspect of the framework does not only include infrastructure for extending the available data and processing classes but also ways of interconnecting components and building applications.
The core of the library is a repository of digital signal processing algorithms related to audio and music. These algorithms can be used for a wide range of applications but, at the time of this writing, they are mostly related with the MTG's research field, which is mainly spectral analysis synthesis and transformations. Nevertheless, the framework has been designed so that further additions can be done without much hassle. This is mainly due to the fact that a CLAM processing network can acknowledge any kind of processing data as long as it complies to the required interface.
Processing classes encapsulate all processing algorithms in a CLAM system. A CLAM system can therefore be seen as a set of interconnected Processing objects. Processing objects offer scalability so that any final CLAM network can be looked at as a Processing composite that includes any number (and levels) of Processing components inside. Processing objects respond to synchronous processing data and asynchronous control events.
CLAM also offers a Visualization module that allows the decoupling of any particular third party toolkit from the system model. This service can be used with any toolkit. The Visualization module implements a model abstraction based on a modified version of the MVC called Model-View-Presentation. The decoupling between the view and the presentation is accomplished through the implementation of a template functor based callback library. It also implements some particular presentations for basic data types (like audio or spectrum) using FLTK [www-FLTK, ] or QT [www-QT, ] and OpenGL [Shreiner, 2004].
In this section we will describe in more details the different components in the repository, and the infrastructure, including general tools and sample applications that are offered as part of the framework.