-
Notifications
You must be signed in to change notification settings - Fork 8
Library for research in audio analysis, processing and synthesis
rikrd/loudia
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
WHAT YOU WILL FIND HERE
-----------------------
A C++ library with Python bindings "Loudia"
It is used to build audio applications.
Loudia is specially targeted for researchers.
The algorithms are not necessarily tuned for performance
but rather for:
* Ease of use
* Flexibility and clarity of the algorithms
* Variety of algorithms
The following algorithms are implemented:
* Window
* Unwrap
* Fast Fourier Transform (FFT/IFFT) (wrapper around libfftw [http://www.fftw.org/])
* Discrete Cosine Transform (DCT)
* Filters (based on Scipy [http://www.scipy.org] implementation):
- LowPass
- HighPass
- BandPass
- BandStop
in the following types:
- Chebyshev I
- Chebyshev II
- Bessel
- Butterworth
* Correlation / Autocorrelation
- Direct calculation
- FFT based calculation
* Resampling (wrapper around libsamplerate [http://www.mega-nerd.com/SRC/])
* Onset Detection Functions:
- High Frequency Content (HFC)
- Flux
- Phase Deviation
- Complex Domain
- Modified Kullback-Liebler
- Peak Center of Gravity
* Pitch Estimation:
- Autocorrelation Function based (ACF)
- Inverse Problem based
* Spectral Bands
- Mel bands
* MFCC
* LPC
* Sinusoidal Modelling:
- Peak Detection
- Peak Interpolation
- Peak Tracking
* Spectral Whitening
* Spectral Noise Suppression
* Non-negative Matrix Factorization (NMF)
* Other experimental and/or unfinished algorithm implementations
- Spectral Reassignment
- Adaptative Optimized Kernel (AOK) (modification of AOK 4.1 [http://www.macunix.net/aok.html])
- Peak Synthesis
- Incremental Non-negative Matrix Factorization (INMF)
- LPC residual
Numerous examples which can also be used for testing in some cases can be found in python/
Some of the examples require an audio WAVE filename as input argument.
DEPENDENCIES
------------
The C++ library Libaudio requires:
- libsamplerate-dev >=0.1.3
- libfftw3-dev >=3.1.2
- gcc
- python >=2.5
The Python bindings Libaudio require:
- swig
- numpy-dev
- python-dev
Libaudio uses a template library called Eigen (http://eigen.tuxfamily.org).
In C++ all algorithms use Eigen::Matrix types as inputs and outputs.
In the Python bindings use Numpy arrays as inputs and outputs.
BUILD/INSTALL LOUDIA
--------------------
To build and install Loudia run:
./waf configure --prefix=/some/install/dir
./waf build
sudo ./waf install
To uninstall it run:
sudo ./waf uninstall
Several options allow different building modes.
To build without Python bindings run:
./waf configure --no-python-bindings
./waf build --no-python-bindings
To build the documentation run:
./waf configure --doc
./waf build --doc
To build in debug mode run:
./waf configure --debug
./waf build --debug
These options can be combined.
QUICK HOWTO
-----------
From Python you may create algorithm, change its parameters and call the process method:
import numpy
import pylab
import loudia
# We create a 120 samples frame
# of a sine at 440 Hz
# with a samplerate of 8000 Hz
data_frame = numpy.array(numpy.sin(2*numpy.pi*440.0*numpy.arange( 0.0, 120/8000.0, 1/8000.0)))
fft = loudia.FFT()
fft.setFftSize( 256 )
result = fft.process( data_frame )
# Note that the results of the FFT algorithm
# are stacked in rows (we only plot the first)
pylab.subplot(211)
pylab.plot( abs( result[0,:] ) )
# When setting several parameters we might
# not want the algorithm to reconfigure itself
# method after each parameter setting,
# and we will call the setup() manually
fft.setFftSize( 1024, False )
fft.setZeroPhase( True, False )
fft.setup()
result = fft.process( data_frame )
# Note that the results of the FFT algorithm
# are stacked in rows (we only plot the first)
pylab.subplot(212)
pylab.plot( abs( result[0,:] ) )
pylab.show()
LIMITATIONS
-----------
A few assumptions are used when using the library:
* Loudia has no algorithm for loading audio frames
* All algorithms take Eigen::Matrix types as inputs and outputs in the process() methods
* Loudia does NOT have a streaming mode. All algorithms mantain a state which can be reset using reset().
And the process() methods may act on preallocated matrices. Therefore with the use of Eigen::Map,
Loudia can be used inside streaming libraries that expose the buffers.
---------------------------
Loudia (C) 2008, 2009 Ricard Marxer
About
Library for research in audio analysis, processing and synthesis
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published