Another Audio Library?
What makes CLAM different from other similar solutions that already
exist? In section 3.3 we will then make a more
extensive study on the differences between CLAM and the environments
presented in chapter 2. But it is
interesting to highlight from the start what are the most important
features of our framework that make it different to anything else.
- To begin with, CLAM is truly object-oriented. Extensive software
engineering techniques have been applied in order to design a framework
that is both highly (re)usable and understandable. Although the term
sound object has been around for many years, and OO techniques
have also been applied in many audio and music related applications,
few of these have conceptually applied the ``everything is an object''
maxima. In our framework, all data types and processing or flow control
entities are well-behaved objects.
- CLAM is comprehensive since it not only includes classes for
processing but also for audio and MIDI input/output, XML serialization
services, algorithm and data visualization and interaction, and multi-threading
- CLAM deals with a wide variety of extensible data types that
range from low-level signals (such as audio or spectrum) to higher-level
semantic structures (such as musical phrase or segment).
- The framework is cross-platform. All the code is ANSI C++ and
it is regularly compiled under Linux, Windows and Mac OSX using the
most commonly used compilers. Even the code for input/output, visualization
and multi-threading is cross-platform down to the lowest possible
- The project is licensed under the GPL (GNU Public License)
terms and conditions. Although we maintain the option of double licensing
the framework (i.e. offering an alternative commercial license), everything
offered in the public version is GPL and the project is therefore
Free Software, open-source, and collaborative.
- CLAM is bound to survive. Even though its public success is
by no means guaranteed, CLAM will surely remain the basis for all
future developments in the MTG and thus will be maintained and updated
on a regular basis.
- The framework can be used either as a regular C++ library or
as a prototyping tool. In the first mode, the user can extend,
adapt or optimize the framework functionality in order to implement
a particular application. In the second mode, the user can easily
build a prototype application in order to test a new algorithm or
signal processing application.