# BuboQuark: Simple, hassle-free live coding This repository is a collection of tools and methods that I use to make live coding easier on **SuperCollider**. My aim is to make that setup easy to install on my other computers. This repository is not bringing anything new or interesting. This is merely a default configuration for my **SuperCollider** install. It's just a bunch of scripts that I use to make my life easier and I am no expert. I rely heavily on **JITLib** and other Quarks that I find useful. ## Installation To install the **BuboQuark**, simply run the following command in your favorite **SC** editor: ```bash Quarks.install("https://github.com/Bubobubobubobubo/BuboQuark") ``` ## Usage This quark brings syntax shortcuts and minor improvements (_highly personal matter_) to make **SuperCollider** easier to handle on stage. ### Boot method There is a `Boot()` class that acts as a configuration file for my setup. This configuration file is rather classic: - raises the conservative options of `Server.default` - pushes everything into a `ProxySpace` - set paths for samples and synthdefs - install a `StageLimiter` not to blow up my speakers **Note:** I put my configuration into `./config/livecoding/` and there should be a folder named `samples/` and a file called `Synthdefs.scd`. ### Simplified useful commands - `Panic()`: shortcut for `CmdPeriod.run`. - `Boot(path)`: boot my config (**hardcoded** path or user specified path) - `Scope()`: a scope that always stays on top! - `FScope()`: a frequency scope that always stay on top! - `Gui()`: a server GUI window that always stay on top! ### Patterns Patterns are powerful but writing them is long and can lead to a lot of typing errors. Moreover, they are often centered around list manipulation. **BuboQuark** defines a few helpers to transform a regular `Array` into various patterns: ```supercollider [1, 2, 3, 4].pseq ``` Consider the source as a documentation. ### Patterns I don't like using keys because of the backslash (`\`), a symbol that is really hard to type on AZERTY keyboards. For that reason, I much prefer the `[instrument: 'plaits', dur: 2]` syntax. I added a `.pat` method to convert an array into a `Pbind`. There are optional arguments to specify the `fadeTime` and `quant` for that pattern. Demo: ```supercollider ( [ instrument: 'sinfb', rel: Pbrown(0.1, 0.5, 0.125, inf), note: Place([Pxrand([0, 3, 7, 10], 12), 0, 3, 5, 0, 12, 0, 7, 5, [5, 10, 7].pwhite(1)], inf), octave: [Pxrand([5, 6, 4], 4)].pxrand(inf), dur: Pbjorklund2(6, 8, inf) / 2, legato: 0.1 ].pat(~test).play; ) ``` ### NodeProxy The `NodeProxy` roles are somewhat verbose. I have tried to make the syntax easier on the eye by creating the `fx`, `wet` and `infx` methods. Here is a demo of how I use it: ```supercollider ( // Adding a tiny bit of reverb on slot 10 with a wet of 0.2 ~test.fx(10, 0.2, { arg in; GVerb.ar(in) }); ) ~test.wet(10, 0.5) // bring the reverb up with the wet method ```