In this chapter we present the CLAM framework. This software framework is a comprehensive environment for developing audio and music applications. It may be also used as a research platform for the same domain. CLAM can be seen both as the origin and the prove of concept of the conceptual models and metamodels that are included in this thesis.
CLAM is written in C++, it is efficient, object-oriented, and cross-platform. It presents a clean and clear design result of applying thorough software engineering techniques. The framework can be used as a black-box, relying on the offered repository, or as a white-box framework, extending its functionality through its infrastructure.
CLAM's repository is made up of a large collection of signal processing algorithms encapsulated as Processing classes and a number of data structures included in its Processing Data repository. The Processing repository basically includes algorithms for signal analysis, synthesis and transformation. Furthermore it also includes encapsulated platform and system-level tools such as audio and MIDI input/audio both in streaming and file mode. On the other hand the Processing Data repository offers those data types that are needed as inputs or outputs of the processing algorithms. These include classes such as Audio, Spectrum or Fundamental Frequency. It also includes a collection of statistical Descriptors that can be obtained from the basic Processing Data objects.
On the other hand CLAM's infrastructure offers ways of extending the already existing repository by deriving new Processing or Processing data classes. In the case of Processing classes this is accomplished by a simple inheritance mechanism in which the user is forced to implement some particular behavior in his/her concrete Processing class. Mechanisms for composing with Processing objects, handling input and output data through Ports and control data through Controls are also offered. The Processing Data Infrastructure is based on CLAM's Dynamic Types. This is a special C++ class that, using macros and template metaprogramming techniques, offers a very simple way of creating data containers with a homogeneous interface and automatic services such as introspection or passivation facilities. CLAM's infrastructure is completed by a set of tools for platform abstraction, such as audio and MIDI or multithreading handling mechanisms, a cross-platform toolkit-independent visualization module, XML serialization facilities or application skeletons.
CLAM also offers a number of usage examples and ready-to-use applications. These applications include SMSTools, a graphical environment for audio analysis/synthesis/transformation, and Salto, a spectral-sample based sax and trumpet synthesizer. Another important application is the Network Editor, a graphical tool for creating CLAM Networks using a graphical boxes-and-connections metaphor ala Max. This application can be used as a rapid prototyping and research tool. But CLAM has also been used in many other internal projects for instance for developing a voice processing VST plugin, a high-quality time-stretching algorithm or content-based analysis applications.
CLAM can be compared to some other frameworks presented in chapter 2. After the discussion in section 3.3, and using the different information that we have gathered in it, we will now build a comparison table as a conclusion for this chapter. For doing so we will use some of the features that we most value about CLAM and we think are essential of any framework. A framework that may aim at substituting CLAM should be :
As a final conclusion it is important to mention that although CLAM has already proven useful, it is well designed and presents many interesting features, it is success is not guaranteed. The success of a framework depends on many internal but also external factors. In [Scaletti, 2002], Carla Scaletti outlines the most important factors that (``apart from the lucky accidents'') will make a computer music language successful. These are applicable extensible to not only computer music languages but also any kind of music related environment. We will reproduce the complete list as a conclusion for this chapter: