Skip to content

A performance system for controlling Live Coding Data Bases from Tidal Cycles & Hydra in the Pulsar text editor with SuperCollider GUI & controllers

License

Notifications You must be signed in to change notification settings

Xon77/Live4Bubbles

Repository files navigation

Welcome to Live 4 Bubbles !    Licence link    Buy Me A Coffee donate button    Patreon donate button

Languages / Langues: 🇫🇷 Français | 🇬🇧 English


📖 Overview


🫧 What is Live 4 Bubbles ?

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.

🔮 Vision and Limits

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.

⚠️ While Live 4 Bubbles can be launched quickly once installed, the installation process involves editing some configuration files and setting up numerous open-source dependencies and programs to maximize control possibilities over sound synthesis and pattern manipulation.

✨ Core Features

🎚️ Multi-Track Control System

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

🎼 Parametric Control of your Tidal Cycles code line / pattern

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

💿 Installation


📋 Prerequisites

Before installing Live 4 Bubbles, ensure you have the following installed:

Optional:

📥 Step-by-Step Installation

1️⃣ Download Live 4 Bubbles

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

2️⃣ Install Live 4 Bubbles in SuperCollider Extensions

Copy 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\.

3️⃣ Configure Pulsar Tidal Cycles Settings

In Pulsar's Package Manager, configure the Tidal Cycles settings:

  1. Open Pulsar and go to PackageOpen Package Manager,
  2. Find tidalcycles package and click Settings,
  3. Enable OSC eval in the settings to evaluate code through OSC messages,
  4. In Boot Tidal Path, set the path to the custom BootTidal.hs file included in this repository:

4️⃣ Edit BootTidal.hs Script Paths

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

  1. Replace /Users/xon/Desktop/Live_Coding/Tidal/ExtraSynths/ with your absolute path to L4B_Tidal/BootTidal/
  2. Update these 4 script lines:
  3. Example of correct path: :script /Users/YourUsername/Live4Bubbles/L4B_Tidal/BootTidal/FM-Synths-params.hs

🛠️ Optional Configurations

1️⃣ Pulsar Styling

For a customized Pulsar appearance optimized for Live 4 Bubbles:

  1. Navigate to folder L4B_Pulsar/,
  2. Copy the styles from styles.less,
  3. Paste them into your Pulsar stylesheet (Edit → Stylesheet).

2️⃣ Install SuperCollider Quarks (extensions) for some MIDI Controllers

If you plan to use the MIDI controllers mentioned below, install the required Quarks in SuperCollider:

🎚️ For Xone K2 or K3:

Quarks.install("Modality-toolkit");
  • Copy the xoneK2.desc.scd file into the MKtlDescriptions folder 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\.
  • Install the Twister Quark and the Connection Quark, 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:


⚙️ Setup


📁 Setup your Sound Database

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:

  1. Navigate to folder L4B_SC/L4B_SC_Project/,
  2. Open SuperCollider initialization file _0T_Init_TidalX.scd,
  3. Edit line 55 to set the sound folder path to your sound database.

📑 Setup your Code Partition in Pulsar

Create a four-track code execution partition by opening all Tidal Cycles files from the L4B_Tidal/ folder in Pulsar:

  1. L4B_Tidal/DJCode1.tidal in tab 1,
  2. L4B_Tidal/DJCode2.tidal in tab 2,
  3. L4B_Tidal/DJCode3.tidal in tab 3,
  4. L4B_Tidal/DJCode4.tidal in tab 4,
  5. L4B_Tidal/DJCodeG.tidal in tab 5 (for global control),
  6. L4B_Tidal/ControlTidal.tidal in 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.


🚀 Quick Start

1️⃣ Start SuperCollider

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

2️⃣ Launch Pulsar and Tidal Cycles

Navigate to folder L4B_Tidal/ and open ControlTidal.tidal, then evaluate the following sections in order with Ctrl+Enter (Cmd+Enter on macOS):

  1. Lines 5 to 1107 - Main control definitions and functions,
  2. Line 1110 - Initialization of controls and variables,
  3. Line 1113 - Update of definitions and functions of step 1,
  4. 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! 🎵✨🎉


📖 Documentation


🎛️ Control Parameters in Tidal Cycles

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:

🎵 Pattern structure

  • 🔴 Track preset number (saves and recalls all parameters below),
  • 🔵 Code line / pattern (of the tab in Pulsar),

⏱️ Timing

  • 🟠 d1 to d8 - Tempo (speed control),
  • 🟤 1Leg to 8Leg - Duration (length variable),
  • 🟤 1LegS to 8LegS - Duration algorithm switch,
  • 1Xon to 8Xon - 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).

〰️ Sound Selection

  • 🔴 1Fol to 8Fol - 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),
  • 🟪 1Buf to 8Buf - Sound File (within the sound folder),
  • 🔴 1FolN to 8FolN - Normalized folder index (0-1),
  • 🟪 1BufN to 8BufN - Normalized file index (0-1).

▶️ Playback

  • 🟢 1Rat to 8Rat - Playback rate/speed,
  • 1Ran to 8Ran - Context/line-dependent parameter (djf filter by default).

🎨 Sound Effects (2 chains per track)

  • 🟢 1fxs to 8fxs / 1fxs2 to 8fxs2 - When (timing algorithm type),
  • 🟢 1fxt to 8fxt / 1fxt2 to 8fxt2 - When value (value of the When algorithm),
  • 🟢 1fxx to 8fxx / 1fxx2 to 8fxx2 - How (superposition or not, with delays of various durations),
  • 🟢 1fxp to 8fxp / 1fxp2 to 8fxp2 - What (specific effect transformation),
  • 🟢 1fxv to 8fxv / 1fxv2 to 8fxv2 - How much or What value (value of the What algorithm).

🔄 Pattern Functions (2 chains per track)

  • 🔵 1fus to 8fus / 1fus2 to 8fus2 - When (timing algorithm type),
  • 🔵 1fut to 8fut / 1fut2 to 8fut2 - When value (value of the When algorithm),
  • 🔵 1fux to 8fux / 1fux2 to 8fux2 - How (superposition or not, with delays of various durations),
  • 🔵 1fup to 8fup / 1fup2 to 8fup2 - What (transformations: degradeBy, trunc, etc.),
  • 🔵 1fuv to 8fuv / 1fuv2 to 8fuv2 - How much or What value (value of the What algorithm).

🌐 Spatial

  • 🟡 1Spa to 8Spa - Spatial Channel positioning.

🔧 System Configuration in SuperCollider

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:

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:


See the wiki for more details on documentation (under construction and constant updates).

Additional documentation will be added in the coming weeks and months.


🤝 Contribute


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

ko-fi   


📚 References


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

Workshop photos

Thanks to Julien Dajez for capturing the photos!


🙏 Acknowledgements


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.

🌟 Special Thanks

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.

Notes on AI Usage


This project was supported by the Conseil des arts et des lettres du Québec (CALQ).

CALQ - Conseil des arts et des lettres du Québec


📄 Licence


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

⚠️ Usage Restrictions

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

📋 Disclaimer

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY.


See the License for more details.