Open Source Audio Project Preliminary Design


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