Incudine
Abstract
Incudine is useful to design software synthesizers or sound plugins from scratch, exploiting the expressive power of Common Lisp, without the constraint to use pre-built unit generators. It is also a compositional tool that allows to produce high quality sounds controllable at the sample level, defining and redefining the digital signal processors and the musical structures on-the-fly.
Incudine introduces the Virtual UGen (VUG), a new mechanism for defining primitive unit generators by writing concise and reusable code. The definition of a VUG can contain lisp code, other nested VUGs or "real" unit generators (compiled VUGs), and it is re-arranged (i.e. after the inference of init- and performance-time actions) and compiled efficiently during the creation of a DSP.
Features
- Realtime synthesis with sample-by-sample or block-by-block processing (without a realtime garbage collector but there are facilities for defining cons-free DSP).
- Arbitrary precision. The sample type is double float but the unit generators and the DSP's don't require a particular type. In practice the init-time and performance-time functions of UGEN or DSP are arbitrary lisp functions regulated by the context (i.e. realtime audio).
- Node tree for DSP instances and arbitrary actions.
- Realtime sample accurate scheduling.
- Optional recovery of audio cycles suspended during gc by processing the cached audio inputs and MIDI events. For example, it allows HD recording without losing audio inputs during gc if there aren't xruns.
- Collection of useful re-definable virtual unit generators.
- Collection of GEN routines to fill memory buffers.
- Bounce to disk and bounce to memory buffer.
- MIDI support via PortMidi and Jack MIDI.
- MIDI File I/O support.
- Open Sound Control support.
- Stream socket support.
- Serial I/O support.
- Tempo change with arbitrary curves.
- Import/Export a musical scale from/to scale file format.
- MIDI tuning by sending a bulk tuning dump message with arbitrary checksum function or 128 single note tuning change messages (Exclusive Real Time).
- Frequencies of a TUNING structure changed with the data received from a MIDI bulk tuning dump message.
- Flexible voicer for voice management.
- Score file format (rego file) with time-tagged lisp functions, lisp statements, lisp tags and arbitrary score statements.
- The score file format supports the Org markup language.
- Optional standalone executable.
- Optional interface to interact with the sound editor Snd.
- Optional cudere-clm package, the sound synthesis package CLM (Common Lisp Music) implemented in Incudine.
- Optional interface to define a VUG for a LADSPA audio plugin.
- Optional interface to define a VUG for a LV2 audio plugin.
- Optional FluidSynth SoundFont synthesizer support.
- Incudine is released under the GNU General Public License (GPL) version 2 or later.
Requirements
Incudine works with SBCL, an implementation of ANSI Common Lisp with a high-performance native compiler.
Common Lisp packages:
- ALEXANDRIA
- BORDEAUX-THREADS
- CFFI
- SWAP-BYTES
- [Optional] Linedit for incudine command
Foreign libraries:
- Pthread
- JACK or PortAudio
- PortMidi
- libsndfile
- FFTW
- GNU Scientific Library (GSL)
- [Optional] FluidSynth
- [Optional] LILV
Download
The latest source code can be obtained via Git:
git clone git://git.code.sf.net/p/incudine/incudine
Mirror:
git clone git://github.com/titola/incudine.git
Documentation
Tutorials
The rule of the first expansion
First steps with "real" UGens - Part 1
First steps with "real" UGens - Part 2
Default values for VUG, UGEN and DSP
Foreign plugin audio processors
Interaction with the sound editor Snd
Play SoundFonts with FluidSynth
Instantaneous retrig and gate modulation with ENVELOPE
Note priority in a monophonic synthesizer
Reading and writing MIDI files
Incudine with a Csound score generator