The SndObj Sound Object Library
The SndObj sound object library started off in 1997 as a research project at the Universidade Estadual de Londrina, in South Brazil, funded by the Brazilian Research Council, CNPq. The project was developed at the Nucleo de Musica Contemporanea, by Victor Lazzarini, assisted by Fernando Accorsi. The first implementations of the library were developed under the IBM Risc2000 (AIX, with g++) and PC (Windows95, with Visual C++ and g++) platforms. In 1998, Dr Lazzarini continued the work at the National University of Ireland, Maynooth, where the library was tested on Solaris, Linux and IRIX. In 2001, version 2.00 was developed, as part of a major re-assessment of the code and aspects of design of the library, which include a rationalisation of the SndIO (input/output) class tree, improved code and vectorial processing. These changes have had a great impact on performance, but the new features also rendered the new library incompatible with previous versions. Nevertheless, only simple editing is required to make application code compatible with the new library definitions. A number of examples and templates are provided in this documentation, demonstrating the changes.
The Windows, Linux (with Open Sound System, OSS) and IRIX implementations also feature realtime and MIDI IO, which makes the SndObj library a very powerful toolkit for DSP research and development. This reference guide is intended to facilitate the use of the library for researchers and musicians.
The Sound Object Library is an object-oriented audio processing library. It is a collection of objects for synthesis and processing of sound. These can be used to build applications for computer-generated music. The source code is multi-platform and can be compiled under any C++ compiler. If you want to use the library, you will have to install a C++ compiler. The Windows95 library binaries supplied were compiled under Cygwin g++ (libsndobj.a). In theory, the source code can be compiled using any other compiler system that includes Windows MME library and header files (such as VisualC++). Full POSIX compliance (and the presence of the pthread library) is necessary for the SndThread class. At the moment, only the Cygwin GNU C++ compiler supports this feature on Windows (UNIXs are POSIX-compliant). The cygwin compiler is freely available at http://ww.cygnus.com/cygwin. If you want to build SndObj under a different compiler, a Makefile is supplied. It will probably work with most of the compilers, although it might require a little editing. There are also UNIX binaries for Linux (compiled under g++) and IRIX (compiled under sgi's ProC++). As mentioned before, the IRIX and Linux/OSS version comes with platform-specific realtime IO objects. For information on OSS, please refer to http://www.4front-tech.com.
Version 2.00 changes
SndIO tree completely re-structured: SndIO is now instantiable, providing standard input/output; SndFIO is also now instantiable (implementing raw binary file IO), as well as SndWave and SndAiff: the separate input/output classes were all consolidated into one class. SndRTIO is now the sole class for realtime IO on the three platforms and a new class SndBuffer is provided for RAM IO and interthread/process communication.
SndObj is now instantiable. Several standard operators were defined for the use with the SndObj-derived classes, providing extra processing flexibility.
Processing is now vectorial. While the first versions of the library were designed to work on a single-sample basis, enabling multiple sampling rates, etc., it was clear that this was not the most efficient design. Version 2.00 introduces a vector-based output, which will enhance the performance of applications, while permitting the use of two concurrent processing rates whenever this is needed.
SndThread: a new thread-control class is introduced in this version, permitting the easy set-up of multithreaded applications. This class is experimental and new developments are expected on this aspect of the library, paving the way for the design of a sound processing system based on the SndObj library.
Installation instructions (source distribution)
- Put the distribution file, SndObj-2.0.tar.gz, in the target directory.
Type gunzip SndObj-2.0.tar.gz to decompress the archive.
- Expand the archive, type tar xvf SndObj.tar.
- Edit the top-level Makefile to set the platform you are build the library
- Type make to run the top-level Makefile to build the library;
to install the library (on /usr/local), type make install;
to build the examples, type make examples; to clean up the distribution
directories, type make clean.
- If you are not building the library on any of the platforms listed above,
you will need to edit the Makefile found on the src directory.
In case of any queries, you can contact me at Victor.Lazzarini@may.ie .
Dr Victor Lazzarini
Department of Music
National University of Ireland, Maynooth
Maynooth Co. Kildare