Summary and Conclusions

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 :

  1. Comprehensive. It should offer a complete infrastructure and tools for audio and music analysis, processing and synthesis. Furthermore, it should offer tools for object passivation, visualization or input/output of any kind of audio and music source.
  2. Cross-platform. It should be fully portable at least across major operating systems and platforms.
  3. Free/Open Source. It should be at least Open Source and preferably Free in the sense defined by the Free Software Foundation (see [Free Software Foundation, ]).
  4. Active. In order to be successful a software framework must be active and have a community that offers support and feedback.
  5. Complete software framework. It should be usable as a white-box / black-box framework but should also offer a visual builder or similar tool.
  6. Efficient. Any usable framework for audio processing should have efficiency as one of its fundamental goals.
  7. Well-implemented. The framework should be implemented in C++ as this is the best suited language for our purposes. Furthermore, it should use good coding practices and design principles such as Design Patters and the like.
Taking those features into account we in Table 3.1 we summarize how the environments most closely related to CLAM stand the comparison with our framework.

Table 3.1: Comparing Frameworks similar to CLAM

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: