Skip to content

defaultxr/thundersnow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

thundersnow

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.

Intro

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.

Overview

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.

Main GUIs

Thundersnow

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.

Tracker

A tracker-inspired interface over cl-patterns’ ptrack pattern.

Piano roll

A piano roll interface for editing sequences of notes via cl-patterns’ eseq. Will eventually become a more general pattern/data plotting interface.

Stepseq

A simple drum machine-style interface for editing and sequencing drum patterns.

Wave editor

An Audacity-like UI to show the waveform of a sound buffer and optionally splits data.

Env editor

An editor allowing the creation and editing of envelopes and their properties.

Piano GUI [working name]

Simple interface to trigger and control synths from a piano-based MIDI controller or via the GUI.

Keyboard GUI [working name]

Simple interface to trigger and control synths from your keyboard or via the GUI.

Pattern GUIs

GUIs for showing the structure of defined patterns and for changing their parameters, etc.

Synth GUIs

Not implemented at all yet. Interfaces to controlling synths as well as generating synthdefs. Will likely use template macros to generate the synthdefs.

File/object browser

Not implemented at all yet. Fast/efficient interface to find a file (local or potentially remote) or object (i.e. a bdef).

Gadgets

Knob

Basic gadget to view and set a numeric parameter via a radial interface.

X/Y pad

Not implemented at all yet. Two-dimensional “pad” for controlling up to three parameters at once.

Ruler bar [working name]

Not implemented at all yet. Scrollbar replacement gadget that can be used to adjust zoom and scroll position simultaneously.

Scope

Oscilloscope-like display for realtime sound visualization.

Status pane

Basic gadget to show status information such as the number of synths playing, CPU usage, etc.

Tempo pane

Gadget displaying the tempo (in BPM and Hz), pulsing to the beat, and allowing tempo alteration.

Features

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

Known Issues

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

Community

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