Digital audio workstation and live coding laboratory in Common Lisp using the McCLIM Common Lisp Interface Manager implementation.
Contains various GUIs and functionality for working with audio in Lisp in real time. Primarily developed for use with cl-patterns and bdef, using audio servers like SuperCollider (via cl-collider) and Incudine.
Please note that this is a major work in progress at the moment, and very little useful functionality is currently implemented. Feel free to submit bug reports or suggestions, though, if you are interested.
To start thundersnow, put it in your quicklisp local-projects
directory, then:
(ql:quickload :thundersnow)
(thundersnow:thundersnow)
More documentation and functionality will exist in the future.
The main GUIs included with thundersnow are the following. Note all of them are in very early stages of development and may have bugs and lack various functionality.
The main interface; gives a general overview of all synths, patterns, bdefs/buffers, and their status, and allows for high-level control and modification of them.
A tracker-inspired interface over cl-patterns’ ptrack
pattern.
A piano roll interface for editing sequences of notes via cl-patterns’ eseq
. Will eventually become a more general pattern/data plotting interface.
A simple drum machine-style interface for editing and sequencing drum patterns.
An Audacity-like UI to show the waveform of a sound buffer and optionally splits
data.
An editor allowing the creation and editing of envelopes and their properties.
Simple interface to trigger and control synths from a piano-based MIDI controller or via the GUI.
Simple interface to trigger and control synths from your keyboard or via the GUI.
GUIs for showing the structure of defined patterns and for changing their parameters, etc.
Not implemented at all yet. Interfaces to controlling synths as well as generating synthdefs. Will likely use template macros to generate the synthdefs.
Not implemented at all yet. Fast/efficient interface to find a file (local or potentially remote) or object (i.e. a bdef
).
Basic gadget to view and set a numeric parameter via a radial interface.
Not implemented at all yet. Two-dimensional “pad” for controlling up to three parameters at once.
Not implemented at all yet. Scrollbar replacement gadget that can be used to adjust zoom and scroll position simultaneously.
Oscilloscope-like display for realtime sound visualization.
Basic gadget to show status information such as the number of synths playing, CPU usage, etc.
Gadget displaying the tempo (in BPM and Hz), pulsing to the beat, and allowing tempo alteration.
- Configuration file loaded when thundersnow is started (located at
$XDG_CONFIG_HOME/thundersnow/init.lisp
). This is basically just whatever Lisp code you want to run before the window opens. Examples/suggestions forthcoming. - Basic “theming” support.
- (Theoretical) support for multiple audio backends, thanks to the use of cl-patterns and bdef.
- Interfaces are sometimes drawn with the wrong size at first, until a command is run or a manual redraw triggered. This appears to be due to this bug in McCLIM.
- Theming is not yet supported for all aspects of the GUI. Related issue in McCLIM.
As far as I’m aware there isn’t a huge community of people using Thundersnow to make music yet. However, if you need support or just want to chat, the “official” room is on Matrix: #cl-patterns:struct.ws.
Any bugs, feature requests, suggestions, etc should be submitted to the GitHub issue tracker. Please feel free to submit issues even if they might already be known as it helps to figure out which parts of the software to prioritize development on. It’s also nice to hear that people are using the software. :)