1Soundpipe 2========= 3 4Soundpipe is a lightweight music DSP library written in C. It aims to provide 5a set of high-quality DSP modules for composers, sound designers, 6and creative coders. 7 8Soundpipe supports a wide range of synthesis and audio DSP 9techniques which include: 10 11- Classic Filter Design (Moog, Butterworth, etc) 12- High-precision and linearly interpolated wavetable oscillators 13- Bandlimited oscillators (square, saw, triangle) 14- FM synthesis 15- Karplus-strong instruments 16- Variable delay lines 17- String resonators 18- Spectral Resynthesis 19- Partitioned Convolution 20- Physical modeling 21- Pitch tracking 22- Distortion 23- Reverberation 24- Samplers / sample playback 25- Padsynth algorithm 26- Beat repeat 27- Paulstretch algorithm 28- FOF and FOG granular synthesis 29- Time-domain pitch shifting 30 31More information on specific Soundpipe modules can be found in the 32[Soundpipe module reference guide](https://paulbatchelor.github.com/res/soundpipe/docs/). 33 34Features 35--------- 36- High quality modules ported from Csound and FAUST 37- Sample accurate timing 38- Small codebase 39- Static library 40- Easy to extend 41- Easy to embed 42 43 44Compilation 45----------- 46 47By default, Soundpipe needs libsndfile, and a standard build environment. 48Other modules that use other external libraries will need to be explicitly compiled 49by modifying config.mk. 50 51To compile: 52 53make 54 55sudo make install 56 57 58Examples 59-------- 60To build the examples, go into the examples folder and run "make", which will 61create files with a .bin extention. To run an example, run "./ex_foo.bin". When 62an example is run, it will generate a 5 second file called "test.wav". 63 64 65Tests 66----- 67 68Tests in Soundpipe are used to determine whether or not modules behave as 69expected. Tests write the output of a module to memory, and check the MD5 hash 70value of the output against the MD5 value of a reference signal. 71 72To build a test file, go into the test folder, and run "make". Then, run 73"./run.bin", which runs the tests. As the tests are run, an "ok" will appear in 74the log if a test passes, and a "not ok" will appear if a test fails. 75 76It is possible to hear the output of a particular test if you know the test 77number. You will need to have sox installed. For example, 78to hear what test 11 sounds like, run the following 79commands: 80 81./run.bin render 11 82 83./write_wave.sh 0011.raw 84 85This will generate a file called out.wav. 86 87The testing utility has a few optional arguments. To see all possible arguments, 88run "./run.bin help". 89 90The Soundpipe Model 91------------------- 92 93Soundpipe is callback driven. Every time Soundpipe needs a frame, it will 94call upon a single function specified by the user. Soundpipe modules are 95designed to process a signal one sample at a time. Every module follows the 96same life cycle: 97 981. Create: Memory is allocated for the data struct. 992. Initialize: Buffers are allocated, and initial variables and constants 100are set. 1013. Compute: the module takes in inputs (if applicable), and generates a 102single sample of output. 1034. Destroy: All memory allocated is freed. 104 105Documentation 106------------- 107If you have lua installed on your computer, you can generate the current html 108documentation for soundpipe by running "make docs". A folder called "docs" 109will be created. The top page for the documentation is docs/index.html. 110