Incudine

Music/DSP programming environment for Common Lisp

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 contains lisp code and/or other nested VUGs (or "real" UGens), and it is re-arranged 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 it's simple to define cons-free DSP)

Sample accurate callbacks

Non-realtime bounce to disk and bounce to buffer

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).

Optional standalone executable

Optional score (rego) files with time-tagged lisp functions, lisp statements, lisp tags and arbitrary score statements

Graph of DSP's

Collection of useful re-definable VUG's

Collection of GEN routines

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

The score (rego) files are Org friendly. It is possible to edit and organize score files with spreedsheet-like capabilities, headlines, unordered lists, blocks, properties, hyperlinks, todo items, tags, deadlines, scheduling, etc.

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:

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

Incudine Manual

Tutorials

Getting Start - Part 1

Getting Start - Part 2

Getting Start - Part 3

Getting Start - Part 4

The rule of the first expansion

Real-Time Scheduling

First steps with "real" UGens - Part 1

First steps with "real" UGens - Part 2

Local Virtual UGens

Default values for VUG, UGEN and DSP

Block by block processing

Read macro sharp-t

Musical Tunings - Part 1

Musical Tunings - Part 2

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

Incudine Command

Jack MIDI Interface

Open Sound Control messages

Reading and writing MIDI files

Incudine with a Csound score generator

Mailing List

Subscribe

Archive

Projects using Incudine