Merge branch 'develop' of aubio.org:/git/aubio/aubio into wavetable
[aubio.git] / src / aubio.h
index f523582..5f8b518 100644 (file)
 /*
-        Copyright (C) 2003 Paul Brossier <piem@altern.org>
-
-        This program is free software; you can redistribute it and/or modify
-        it under the terms of the GNU General Public License as published by
-        the Free Software Foundation; either version 2 of the License, or
-        (at your option) any later version.
-
-        This program is distributed in the hope that it will be useful,
-        but WITHOUT ANY WARRANTY; without even the implied warranty of
-        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-        GNU General Public License for more details.
-
-        You should have received a copy of the GNU General Public License
-        along with this program; if not, write to the Free Software
-        Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-        
+  Copyright (C) 2003-2013 Paul Brossier <piem@aubio.org>
+
+  This file is part of aubio.
+
+  aubio is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  aubio is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with aubio.  If not, see <http://www.gnu.org/licenses/>.
+
 */
 
 /** \mainpage 
- *
- * \section whatis Introduction
- *
- *     Aubio is a library for audio labelling: it provides functions for pitch
- *     estimation, onset detection, beat tracking, and other annotation tasks.
- *
- *  \verbinclude README
- *
- * \section bugs bugs and todo
- *
- *     This software is under development. It needs debugging and
- *     optimisations.
- *
- *  See <a href='bug.html'>bugs</a> and <a href='todo.html'>todo</a> lists.
- * 
+  \section introduction Introduction
+  aubio is a library to extract annotations from audio signals: it provides a
+  set of functions that take an input audio signal, and output pitch estimates,
+  attack times (onset), beat location estimates, and other annotation tasks.
+  \section basics Basics 
+  All object structures in aubio share the same function prefixes and suffixes:
+  
+    - \p new_aubio_foo creates the object \p foo
+    - \p aubio_foo_do executes the object \p foo
+    - \p del_aubio_foo destroys the object \p foo
+
+  All memory allocation and deallocation take place in the \p new_ and \p del_
+  functions. Optionally, more than one \p _do methods are available.
+  Additional parameters can be adjusted and observed using:
+  
+    - \p aubio_foo_get_param, getter function, gets the value of a parameter
+    - \p aubio_foo_set_param, setter function, changes the value of a parameter
+
+  Unless specified in its documentation, no memory operations take place in the
+  getter functions. However, memory resizing can take place in setter
+  functions.
+
+  \subsection vectors Vectors
+
+  Two basic structures are being used in aubio: ::fvec_t and ::cvec_t. The
+  ::fvec_t structures are used to store vectors of floating pointer number.
+  ::cvec_t are used to store complex number, as two vectors of norm and phase
+  elements.
+
+  Additionally, the ::lvec_t structure can be used to store floating point
+  numbers in double precision. They are mostly used to store filter
+  coefficients, to avoid instability.
+
+  \subsection objects Available objects
+
+  Here is a list of some of the most common objects for aubio:
+
+  \code
+
+  // fast Fourier transform (FFT)
+  aubio_fft_t *fft = new_aubio_fft (winsize);
+  // phase vocoder
+  aubio_pvoc_t *pv = new_aubio_pvoc (winsize, stepsize);
+  // onset detection
+  aubio_onset_t *onset = new_aubio_onset (method, winsize, stepsize, samplerate);
+  // pitch detection
+  aubio_pitch_t *pitch = new_aubio_pitch (method, winsize, stepsize, samplerate);
+  // beat tracking
+  aubio_tempo_t *tempo = new_aubio_tempo (method, winsize, stepsize, samplerate);
+
+  \endcode
+
+  See the <a href="globals_type.html">list of typedefs</a> for a complete list.
+
+  \subsection example Example
+
+  Here is a simple example that creates an A-Weighting filter and applies it to a
+  vector.
+
+  \code
+
+  // set window size, and sampling rate
+  uint_t winsize = 1024, sr = 44100;
+  // create a vector
+  fvec_t *this_buffer = new_fvec (winsize);
+  // create the a-weighting filter
+  aubio_filter_t *this_filter = new_aubio_filter_a_weighting (sr);
+
+  while (running) {
+    // here some code to put some data in this_buffer
+    // ...
+
+    // apply the filter, in place
+    aubio_filter_do (this_filter, this_buffer);
+
+    // here some code to get some data from this_buffer
+    // ...
+  }
+
+  // and free the structures
+  del_aubio_filter (this_filter);
+  del_fvec (this_buffer);
+
+  \endcode
+
+  Several examples of C programs are available in the \p examples/ and \p tests/src
+  directories of the source tree.
+
+  \subsection unstable_api Unstable API
+
+  Several more functions are available and used within aubio, but not
+  documented here, either because they are not considered useful to the user,
+  or because they may need to be changed in the future. However, they can still
+  be used by defining AUBIO_UNSTABLE to 1 before including the aubio header:
+
+  \code
+  #define AUBIO_UNSTABLE 1
+  #include <aubio/aubio.h>
+  \endcode
+
+  Future versions of aubio could break API compatibility with these functions
+  without warning. If you choose to use functions in AUBIO_UNSTABLE, you are on
+  your own.
+
+  \section download Download
+
+  Latest versions, further documentation, examples, wiki, and mailing lists can
+  be found at http://aubio.org .
+
  */
 
 #ifndef AUBIO_H
 #define AUBIO_H
 
-/**
- * Global Aubio include file.
- * Programmers just need to include this file as:
- *
- * @code
- *   #include <aubio/aubio.h>
- * @endcode
- *
- * @file aubio.h
+/** @file aubio.h Global aubio include file.
+
+  You will want to include this file as:
+
+  @code
+    #include <aubio/aubio.h>
+  @endcode
+
+  To access headers with unstable prototypes, use:
+
+  @code
+    #define AUBIO_UNSTABLE 1
+    #include <aubio/aubio.h>
+  @endcode
+
  */
 
 #ifdef __cplusplus
-extern "C" {
+extern "C"
+{
 #endif
 
-/* first the generated config file */
-#include "config.h"
 /* in this order */
 #include "types.h"
-#include "sample.h"
-#include "fft.h"
-#include "phasevoc.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "lvec.h"
+#include "fmat.h"
+#include "musicutils.h"
+#include "vecutils.h"
+#include "temporal/resampler.h"
+#include "temporal/filter.h"
+#include "temporal/biquad.h"
+#include "temporal/a_weighting.h"
+#include "temporal/c_weighting.h"
+#include "spectral/fft.h"
+#include "spectral/phasevoc.h"
+#include "spectral/filterbank.h"
+#include "spectral/filterbank_mel.h"
+#include "spectral/mfcc.h"
+#include "spectral/specdesc.h"
+#include "spectral/tss.h"
+#include "pitch/pitch.h"
+#include "onset/onset.h"
+#include "tempo/tempo.h"
+#include "io/source.h"
+#include "io/sink.h"
+#include "io/audio_unit.h"
+#include "synth/sampler.h"
+#include "synth/wavetable.h"
+
+#if AUBIO_UNSTABLE
 #include "mathutils.h"
-#include "scale.h"
-#include "hist.h"
-#include "onsetdetection.h"
-#include "tss.h"
-#include "resample.h"
-#include "peakpick.h"
-#include "biquad.h"
-#include "filter.h"
-#include "pitchdetection.h"
-#include "pitchmcomb.h"
-#include "pitchyin.h"
-#include "pitchyinfft.h"
-#include "pitchschmitt.h"
-#include "pitchfcomb.h"
-#include "beattracking.h"
-#include "onset.h"
-#include "tempo.h"
+#include "io/source_sndfile.h"
+#include "io/source_apple_audio.h"
+#include "io/sink_sndfile.h"
+#include "io/sink_apple_audio.h"
+#include "io/sndfileio.h"
+#include "onset/peakpicker.h"
+#include "pitch/pitchmcomb.h"
+#include "pitch/pitchyin.h"
+#include "pitch/pitchyinfft.h"
+#include "pitch/pitchschmitt.h"
+#include "pitch/pitchfcomb.h"
+#include "tempo/beattracking.h"
+#include "utils/scale.h"
+#include "utils/hist.h"
+#endif
 
 #ifdef __cplusplus
 } /* extern "C" */
 #endif
 
 #endif
-