The original motivation for Incudine was to use only the Common Lisp language to synthesize high quality sounds controllable at the sample level, defining and redefining the dsp on-the-fly without the necessity to use unit generators pre-built in another language.
Incudine introduces a new mechanism for defining primitive unit generators by writing concise and reusable code: the Virtual UGen (VUG).
A VUG is a "description" of an unit generator. It is not a function, and the combination of multiple VUGs is not a trivial macro expansion. The definition of a VUG contains lisp code and/or other nested VUGs, and it is re-arranged and compiled efficiently during the creation of a DSP.
Incudine is a work in progress, here is a short summary of the current features:
- Realtime synthesis sample by sample (but currently without a realtime garbage collector)
- Sample accurate callbacks
- Non-realtime bounce to disk
- The default format of the sample is DOUBLE-FLOAT (unboxed type on the C heap)
- Optional standalone executable
- Graph of DSPs similar to SuperCollider3
- Collection of useful re-definable VUGs
- The creation of a DSP automatically generates the code to (re)initialize, perform and control the DSP
- Realtime memory allocation of the C data with the fast allocator TLSF
- Memory pools to avoid garbage and reuse the instances of the DSPs
- Analysis inspired by the Unit Analyzer (UAna) in ChucK
- Collection of GEN routines ala MUSIC-N, Csound, etc
- MIDI interface
- Flexible voicer usable with MIDI or other
- Optional interface to use a LV2 audio plugin in a Virtual UGen by writing only one line
- Incudine is released under the GNU General Public License (GPL) version 2 or later
Tested on x86 and x86_64 with Linux 3.10.22-rt19, RT_PREEPMT patch by Ingo Molnar and Thomas Gleixner.
Currently, Incudine works with SBCL.
Common Lisp packages:
- JACK or PortAudio >= 1.9
- libsndfile >= 1.0.19
- FFTW >= 3.0
- GNU Scientific Library (GSL) >= 1.15
- [Optional] LILV
Currently, the code to get the events from the mouse works only for X window system.
The latest source code can be obtained via Git:
git clone git://gitorious.org/incudine/incudine
cd /path/to/your/registry/ ln -s /path/where/you/put/incudine/incudine.asd cd /path/where/you/put/incudine
Edit and copy the configuration file, with particular attention to
cp incudinerc-example $HOME/.incudinerc
Compile the C utilities:
cd src && make
The check for the libraries fails if the pkg-config tool is not installed on your system. In this case, you can use
make HAVE_JACK=1 HAVE_PA=1 HAVE_X11=1
replacing 1 with 0 if a library is absent.
If you want to build and install the
The command is installed in
/usr/local/bin by default, but you can
change the location by setting the variables
If you have Lilv, a LV2 host library, and you want use LV2 plugins in your scripts:
rm -f incudine make HAVE_LV2=1 install
useful to set respectively the runtime options
--control-stack-size of SBCL (all the arguments of the
command are passed to the toplevel).
If you use SLIME, add these lines to
;; Avoid problems in realtime because the default value is :SPAWN (each ;; request in a separate thread) #+sbcl (setf swank:*communication-style* :sigio) ;; Useful to redirect standard output from any other threads into the REPL #+sbcl (defparameter swank:*globally-redirect-io* t)
There is also a major mode for GNU Emacs. If you want to install it,
add the following lines to your
(push "/path/to/incudine/contrib/editors/emacs" load-path) (require 'incudine)
incudine-devel is a mailing list for technical discussion, usage, announcements and bug reports.
Not required, Incudine is free (as in sea).