| Overview | Installation | Setup | Documentation | References | Contribute | Acknowledgements | Licence |
A performance system for controlling Live Coding Databases from Tidal Cycles and Hydra in the Pulsar text editor with SuperCollider GUI and controllers.
Live 4 Bubbles is partly an extension and modified version based on SuperDirtMixer from Thomas Grund. But it goes far beyond a mixer for Tidal Cycles. It transforms your live coding setup into a performance system with control over your rhythmic, sonic and spatial patterns of sound files and SuperCollider synthesis in real-time.
This is my current main life-long project on which I dedicate myself to develop further and perform with this audiovisual system, for as many years as possible until the end of my life, hopefully! Here you will find my complete project setup and experiments.
As shown in the images above representing a four-track configuration, this project is also designed to be used in conjunction with Fizzy Hydra if you want to add audio-reactive visuals and a VJ system controlled notably by volume data and event triggering per track.
Both tools allow you to assemble, modify, and layer multiple code fragments from databases via graphical interfaces and controllers, creating a hybrid form between computer-assisted composition and performance and traditional live coding. The performance relies on real-time assembly of multiple fragments of code (rhythmic, effects, patterns), their accumulation in layered stacks, and gestural control of their dozens of parameters.
- 🎹 Dynamic code execution control - Up to 8 independent tracks with dozens of parameters each,
- 🎶 Trigger and control Tidal Cycles patterns - From SuperCollider GUI and MIDI controllers to switch between different code patterns on the fly,
- 💾 Preset system - Instant performance setup and transitions with smooth crossfade between patterns,
- 🎲 Randomization system - Randomize each parameter type for creative exploration.
- ⏱️ Timing - Speed, duration, legato, and orbit/track management
- 〰️ Sound Selection - Quick navigation through sound libraries with folder and buffer selection,
- 🎨 Effects Database - Filter and effects to both sound and patterns with multiple parameter controls,
- 🌐 Spatial Control - Channel Positioning for immersive soundscapes.
Before installing Live 4 Bubbles, ensure you have the following installed:
- SuperCollider (tested on 3.14) - Algorithmic & Audio synthesis platform,
- SuperDirtMixer Quark - Live 4 Bubbles is built on top of SuperDirtMixer. Follow the instructions to install all its requirements, including SuperDirt Quark (SuperCollider synthesizer for Tidal),
- Tidal Cycles (tested on 1.9.5 & ghc 9.6.7) - Live coding pattern language,
- Pulsar - Text editor for live coding,
- pulsar-tidalcycles - Pulsar package for Tidal Cycles integration.
Optional:
- pulsar-tidalcycles variation - You can use my variation of pulsar-tidalcycles which adds the ability to select lines from different splits, in addition to the original feature of selecting from different tabs. You can also find or add the code changed via this link,
- SuperCollider sc3-plugins for extended synthesis capabilities,
- Mi-UGens - SuperCollider UGens based on Mutable Instruments eurorack modules.
Download the Live 4 Bubbles repository to your local machine. You can also clone it with GIT in your terminal:
git clone https://github.com/Xon77/Live4Bubbles.gitCopy the L4B_SC/SuperDirtMixerX/ folder into your SuperCollider extensions folder:
- macOS:
~/Library/Application Support/SuperCollider/Extensions/, - Linux:
~/.local/share/SuperCollider/Extensions/, - Windows:
%USERPROFILE%\AppData\Local\SuperCollider\Extensions\.
In Pulsar's Package Manager, configure the Tidal Cycles settings:
- Open Pulsar and go to Package → Open Package Manager,
- Find tidalcycles package and click Settings,
- Enable OSC eval in the settings to evaluate code through OSC messages,
- In Boot Tidal Path, set the path to the custom BootTidal.hs file included in this repository:
- Use the absolute path to
L4B_Tidal/BootTidal/BootTidal.hs - Example:
/Users/YourUsername/Live4Bubbles/L4B_Tidal/BootTidal/BootTidal.hs
- Use the absolute path to
If you want to add extra SuperCollider synths and generators, edit the BootTidal.hs file to update your script paths at the end of the file (lines 308-316):
- Replace
/Users/xon/Desktop/Live_Coding/Tidal/ExtraSynths/with your absolute path toL4B_Tidal/BootTidal/ - Update these 4 script lines:
:script /path/to/FM-Synths-params.hs:script /path/to/Mi-UGens-params.hs:script /path/to/ExtraSynths-params.hs:script /path/to/G_Setup_250225.tidal
- Example of correct path:
:script /Users/YourUsername/Live4Bubbles/L4B_Tidal/BootTidal/FM-Synths-params.hs
For a customized Pulsar appearance optimized for Live 4 Bubbles:
- Navigate to folder
L4B_Pulsar/, - Copy the styles from
styles.less, - Paste them into your Pulsar stylesheet (Edit → Stylesheet).
If you plan to use the MIDI controllers mentioned below, install the required Quarks in SuperCollider:
🎚️ For Xone K2 or K3:
- Install the
Modality-toolkitQuark, by evaluating in SuperCollider:
Quarks.install("Modality-toolkit");- Copy the
xoneK2.desc.scdfile into theMKtlDescriptionsfolder within the Modality Quark directory:- macOS:
~/Library/Application Support/SuperCollider/downloaded-quarks/Modality-toolkit/Modality/MKtlDescriptions/, - Linux:
~/.local/share/SuperCollider/downloaded-quarks/Modality-toolkit/Modality/MKtlDescriptions/, - Windows:
%USERPROFILE%\AppData\Local\SuperCollider\downloaded-quarks\Modality-toolkit\Modality\MKtlDescriptions\.
- macOS:
🎛️ For MIDI Fighter Twister:
- Install the
TwisterQuark and theConnectionQuark, by evaluating in SuperCollider:
Quarks.install("Twister");
Quarks.install("Connection");You can connect up to 3 MIDI Fighters together. Name them: "MIDI Fighter Twister 1", "MIDI Fighter Twister 2", "MIDI Fighter Twister 3" in MIDI configuration.
If you want to edit the controller configuration files, view them, or copy and adapt them to other controllers, the files are:
_Init Midi X2.scdfor Xone K2 or K3 from Allen & Heath,_Init Midi T2.scdfor MIDI Fighter Twister,_Init Midi LPX.scd(in development) for Launchpad X from Novation.
Your sound folder must be structured following the Live 4 Life sound database structure, except that folder names should use underscores instead of spaces (e.g., DB_MBass instead of DB MBass).
Example structure:
YourSoundFolder/
├── DB_Kick/
│ ├── sound1.wav
│ └── sound2.wav
├── DB_Snare/
├── DB_Bass/
└── ...
Configure the sound folder path in SuperCollider:
- Navigate to folder
L4B_SC/L4B_SC_Project/, - Open SuperCollider initialization file
_0T_Init_TidalX.scd, - Edit line 55 to set the sound folder path to your sound database.
Create a four-track code execution partition by opening all Tidal Cycles files from the L4B_Tidal/ folder in Pulsar:
L4B_Tidal/DJCode1.tidalin tab 1,L4B_Tidal/DJCode2.tidalin tab 2,L4B_Tidal/DJCode3.tidalin tab 3,L4B_Tidal/DJCode4.tidalin tab 4,L4B_Tidal/DJCodeG.tidalin tab 5 (for global control),L4B_Tidal/ControlTidal.tidalin tab 6 or any tab (for initialization).
Other code execution workflows are possible. For example, you can execute code lines by selecting different splits and tabs. (The images above represent four splits of the first tab.)
📌 Note: The DJCode files provided here are example templates as I'm currently focusing on a four-track model. However, it is possible to add additional control pages / tracks. You can use 2-3 batch find/replace operations to change the variable names. See the instructions at the end of the file DJCode2.tidal (lines 486-489) for examples.
📌 Note: This step is only necessary the first time. Once you save your Pulsar workspace, you can simply reopen Pulsar with the saved tab layout for subsequent sessions.
Navigate to folder L4B_SC/L4B_SC_Project/ and open SuperCollider initialization file _0T_Init_TidalX.scd, then evaluate the section in parentheses between lines 16 and 422 within the file (Cmd+Enter on macOS, Ctrl+Enter on Windows/Linux).
This will:
- Boot the SuperCollider server,
- Load SuperDirt and Live 4 Bubbles,
- Initialize the GUI & OSC,
- Setup all MIDI connections (if available).
Navigate to folder L4B_Tidal/ and open ControlTidal.tidal, then evaluate the following sections in order with Ctrl+Enter (Cmd+Enter on macOS):
- Lines 5 to 1107 - Main control definitions and functions,
- Line 1110 - Initialization of controls and variables,
- Line 1113 - Update of definitions and functions of step 1,
- Lines 1118 to 1136 - Final initialization for crossfades.
This will boot Tidal Cycles and set up all control parameters for tempo, duration, sound folders, buffers, effects, and more. Once your project is configured, booting Live 4 Bubbles is simple: evaluate one code section in SuperCollider and four code sections in Pulsar.
🎉✨🎵 You can begin to play with the GUI & controllers! 🎵✨🎉
In addition to SuperDirtMixer controls (on volume, panning, reverb, EQ & compression), each of the 8 tracks (tabs or splits) has access to the following 31 parameters:
- 🔴 Track preset number (saves and recalls all parameters below),
- 🔵 Code line / pattern (of the tab in Pulsar),
- 🟠
d1tod8- Tempo (speed control), - 🟤
1Legto8Leg- Duration (length variable), - 🟤
1LegSto8LegS- Duration algorithm switch, - ⚫
1Xonto8Xon- Orbit / track assignment (allows to cut sounds when a new event is triggered among several patterns on the same orbit/track with specific duration algorithms).
- 🔴
1Folto8Fol- Sound Folder (directory containing audio samples) or Synthesis Type (with the B/S switch - Note: some code lines/patterns are not suitable for synthesis and may generate overly high notes or unpleasant sounds, such as line 38 in DJCode1. Ensure your code is appropriate when using or switching to synthesis mode), - 🟪
1Bufto8Buf- Sound File (within the sound folder), - 🔴
1FolNto8FolN- Normalized folder index (0-1), - 🟪
1BufNto8BufN- Normalized file index (0-1).
- 🟢
1Ratto8Rat- Playback rate/speed, - ⚪
1Ranto8Ran- Context/line-dependent parameter (djf filter by default).
- 🟢
1fxsto8fxs/1fxs2to8fxs2- When (timing algorithm type), - 🟢
1fxtto8fxt/1fxt2to8fxt2- When value (value of the When algorithm), - 🟢
1fxxto8fxx/1fxx2to8fxx2- How (superposition or not, with delays of various durations), - 🟢
1fxpto8fxp/1fxp2to8fxp2- What (specific effect transformation), - 🟢
1fxvto8fxv/1fxv2to8fxv2- How much or What value (value of the What algorithm).
- 🔵
1fusto8fus/1fus2to8fus2- When (timing algorithm type), - 🔵
1futto8fut/1fut2to8fut2- When value (value of the When algorithm), - 🔵
1fuxto8fux/1fux2to8fux2- How (superposition or not, with delays of various durations), - 🔵
1fupto8fup/1fup2to8fup2- What (transformations: degradeBy, trunc, etc.), - 🔵
1fuvto8fuv/1fuv2to8fuv2- How much or What value (value of the What algorithm).
- 🟡
1Spato8Spa- Spatial Channel positioning.
The following configuration parameters in _0T_Init_TidalX.scd are set by default but can be modified if needed:
System configuration:
- Line 18:
~tidalHydra = 1;- Send OSC data to Fizzy Hydra (RMS/Event data per channel) - Line 19:
~tidalOutputChannels = 2;- Number of audio output channels - Line 20:
~tidalNbOfLoudspeakers = 2;- Number of loudspeakers - Line 24:
~tidalNbOfOrbits = 4;- Number of tracks/orbits
GUI size & Window position:
- Lines 25-27: GUI size parameters for 4 tracks (see lines 30-33 for 8 tracks configuration)
- Lines 36-37: Window position (X, Y coordinates)
Sound categories:
- Line 63: 5 sound categories for folder organization
Code execution:
- Line 75:
~tidalSeqLineEndR = (476/2).asInteger;- Maximum number of code lines in Pulsar (that can be triggered in Tidal partition files)
Global control page:
- Lines 84-88:
~tidalMainControlPane,~tidalMainControlTab,~tidalMainControlInterpolationA,~tidalMainControlBPMA,~tidalMainControlBPMADur- Controls for interpolation, BPM, and global functions
Effects & Functions database (can also be modified in Haskell control files):
- Line 91:
~tidalnumEffects = 122;- Number of available effects - Line 92:
~tidalnumFunctions = 264;- Number of pattern functions - Line 93:
~tidalnumSwitchX = 24;- Number of superposition/juxtaposition types - Line 94:
~tidalnumWhenS = 39;- Number of timing algorithms - Line 95:
~tidalnumDurAlgs = 44;- Number of duration algorithms - Line 96:
~tidalnumSpaAlgs = 29;- Number of spatial/channel algorithms
VST Plugin:
- Line 136:
~tidalExtraValhallaReverb = 0;- Enable ValhallaSupermassive reverb if installed (set to 1 to enable). To use VST plugins, you must install the VSTPlugin for SuperCollider.
See the wiki for more details on documentation (under construction and constant updates).
Additional documentation will be added in the coming weeks and months.
Want to contribute? Please get in touch with me to organize further development.
Support this project through donations via Ko-fi (one-time) or Patreon (ongoing support and courses).
This project, briefly introduced during Composite Montréal in June 2025 through a 5-minute pitch, has been presented on Saturday, October 18, 2025 as part of a three-hour public experimental workshop at Eastern Bloc, which included a short performance and a participatory exploration session with the audience. I warmly thank Eastern Bloc and CALQ for their support in making this presentation possible.
📸 Some photos from the workshop at Eastern Bloc
Thanks to Julien Dajez for capturing the photos!
As mentioned in my previous project Live 4 Life, I would have been unable to build this tool without the help of the SuperCollider online and live coding community, who always answered my questions and even provided me with examples of codes and classes.
Thomas Grund - Without whom this project would not have come to life:
- For creating the SuperDirtMixer Quark,
- For implementing the feature allowing the evaluation of Tidal code lines in Atom/Pulsar, which I had suggested on GitHub.
This project was supported by the Conseil des arts et des lettres du Québec (CALQ).
© 2025 - End of the world ∞ Christophe Lengelé
Live 4 Bubbles is open source software: you can redistribute it and/or modify it under the terms of the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International license (CC BY-NC-SA 4.0).
No Commercial Use: You may not use this tool for commercial purposes.
Free Party Spirit: I wish it would be used in the spirit of Free Party. Unfortunately, Free does not mean free in this commercial world, but invites to contribute to the costs and labor according to one's ability to give. I do not want this tool to be used, by any means, for personal profit.
Specific Restriction: I do not want this tool to be used by or in Société des Arts Technologiques without my consent, since this organization never helped me in diffusing my spatial creations in their dome despite my previous proposals. (This restriction will be withdrawn only if I have the opportunity to play improvisations in their dome with an appropriate allowance. However, it will surely never happen, since I am no longer interested in sending them applications and I am looking for more open spaces. But, life is unpredictable.)
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY.
See the License for more details.



