PURPOSE:
To design a library that contains the parts necessary for a user to
build an audio application. It seems as though there is a lack of audio
tools for the Linux and UNIX platforms that do the full job an audio application
should do. Such as Cool Edit for the Windows platform does. It also seems
that there is a fragmentation in the Linux world with everyone that writes
an audio application duplicating the same work, such as write and reading
audio files. A world class audio library would solve these problems by
eliminating duplication of effort and providing complex functionality that
all could use. It is also hoped that once this library is formed it will
be easily added to and could be used by colleges and universities doing
research into audio enginering. This work could then be released to the
general public for all to benefit.
PLATFORMS:
This library shall be mainly written for the Linux platform. Coding
will be done such that this library can be easily ported to other UNIX
platforms. Porting to other platforms such as Windows, MacOS, Beos, etc
can be done as long as there is not a major impact to the source code required
to accomplish this.
GOALS:
Open Souce (LGPL)
Object Oriented
C++
API that can be used by C, C++, or Java program
DESIGN:
Initial audio file support for WAVE and MP3
Additional audio files added without compiling base code (ie plugable
module)
Initial sound card support for LINUX
Software shall be a library of audio support code only.
No GUI software included
Make easy to use for application developers
Classes shall fit into 3 Object Clusters:
File
Core
Worker
File Cluster contains classes for:
Reading and Writing to various audio file formats
Reading and Writing to audio devices
Code to dynamically add new file formats without
recompiling code
Core Cluster contains classes for:
Base class for all audio operators
Chain class to allow operators to be chained together
just like building blocks
Data class that defines audio data and operations
that can be made on it
Thread class - need to determine what best method
is. pthread vs some form of kernel thread
Worker Cluster contains classes that actually do something useful for
the user
Timer class - allows one to start and stop recording/playing
audio at at certain time
FFT Class - performs fft on audio data for display
of spectrum
Mixer - mix various input audio sources to various
audio outputs
- this can be used to reduce 2 channel stereo to one channel mono
Filter Classes - filters to filter the audio data
Converter class - converts audio data to different
rates