- Notifications
You must be signed in to change notification settings - Fork7
A lightweight music DSP library.
License
PaulBatchelor/Soundpipe
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Soundpipe is a lightweight music DSP library written in C. It aims to providea set of high-quality DSP modules for composers, sound designers,and creative coders.
Soundpipe supports a wide range of synthesis and audio DSPtechniques which include:
- Classic Filter Design (Moog, Butterworth, etc)
- High-precision and linearly interpolated wavetable oscillators
- Bandlimited oscillators (square, saw, triangle)
- FM synthesis
- Karplus-strong instruments
- Variable delay lines
- String resonators
- Spectral Resynthesis
- Partitioned Convolution
- Physical modeling
- Pitch tracking
- Distortion
- Reverberation
- Samplers / sample playback
- Padsynth algorithm
- Beat repeat
- Paulstretch algorithm
- FOF and FOG granular synthesis
- Time-domain pitch shifting
More information on specific Soundpipe modules can be found in theSoundpipe module reference guide.
- High quality modules ported from Csound and FAUST
- Sample accurate timing
- Small codebase
- Static library
- Easy to extend
- Easy to embed
By default, Soundpipe needs libsndfile, and a standard build environment.Other modules that use other external libraries will need to be explicitly compiledby modifying config.mk.
To compile:
make
sudo make install
To build the examples, go into the examples folder and run "make", which willcreate files with a .bin extention. To run an example, run "./ex_foo.bin". Whenan example is run, it will generate a 5 second file called "test.wav".
Tests in Soundpipe are used to determine whether or not modules behave asexpected. Tests write the output of a module to memory, and check the MD5 hashvalue of the output against the MD5 value of a reference signal.
To build a test file, go into the test folder, and run "make". Then, run"./run.bin", which runs the tests. As the tests are run, an "ok" will appear inthe log if a test passes, and a "not ok" will appear if a test fails.
It is possible to hear the output of a particular test if you know the testnumber. You will need to have sox installed. For example,to hear what test 11 sounds like, run the followingcommands:
./run.bin render 11
./write_wave.sh 0011.raw
This will generate a file called out.wav.
The testing utility has a few optional arguments. To see all possible arguments,run "./run.bin help".
Soundpipe is callback driven. Every time Soundpipe needs a frame, it willcall upon a single function specified by the user. Soundpipe modules aredesigned to process a signal one sample at a time. Every module follows thesame life cycle:
- Create: Memory is allocated for the data struct.
- Initialize: Buffers are allocated, and initial variables and constantsare set.
- Compute: the module takes in inputs (if applicable), and generates asingle sample of output.
- Destroy: All memory allocated is freed.
If you have lua installed on your computer, you can generate the current htmldocumentation for soundpipe by running "make docs". A folder called "docs"will be created. The top page for the documentation is docs/index.html.