ssssam / boucle

Boucle disaster looper
GNU General Public License v3.0
2 stars 0 forks source link

Boucle

Boucle is an incompetent glitch looper accompanist.

Version: 12 (using negative versioning)

Maximum lines of code: 5000

How to do it

Use cases:

Build 4 testing:

mkdir build
meson ..
mesonconf -Dprefix=`pwd`/../prefix
ninja-build install

Test that thing with a file as input:

LV2_PATH=`pwd`/../prefix/lib64/lv2 ../cli/boucle_cli.py \
    --input ../examples/ibeat.org-j1s-SynthArpBuildLoop-97bpm.mp3 \
    --tempo=97 --loop-length=16

Let's drive it with a virtual MIDI keyboard:

jack-keyboard &
LV2_PATH=`pwd`/../prefix/lib64/lv2 ../cli/boucle_cli.py \
    --control jack-keyboard:midi_out \
    --input ../examples/ibeat.org-j1s-SynthArpBuildLoop-97bpm.mp3 \
    --tempo=97 --loop-length=16

Hooray!

Similar things

Hardware

Open software

Propriatary software

Architecture

The core of Boucle is inside an LV2 plugin. This plugin provides a delay buffer and can perform various transformation operations on the position of playhead while playing from it.

The core has audio input and output ports, and a control port for sending transformation operations. The operations are defined using a custom protocol built on the LV2 Atoms extension.

The Boucle LV2 plugin also contains the MIDI bridge. This could theoretically be separated into a different plugin, but we would hit the issue that JACK doesn't understand LV2 Atom ports so it would be a pain in the ass trying to to link the MIDI bridge to the core plugin in most cases.

To make Boucle more "playable", the MIDI bridge handles tempo syncing so that it can map notes to things like "stutter for 1 beat".

Boucle's primary use case is to work live as a loop butcher, and tooling is provided to make this easier. Currently the only tooling is a command-line tool, but a graphical user interface would be welcome.

Boucle could also work with a sequencer. There's no sequencer UI that currently supports generating Boucle events, but you can connect anything to the MIDI bridge (stepseq.lv2? Cythar? Non? Iannix, even some generative algorithm.