diff --git a/Classes/BuboBoot.sc b/Classes/BuboBoot.sc index 33ed20f..6e306ff 100644 --- a/Classes/BuboBoot.sc +++ b/Classes/BuboBoot.sc @@ -8,11 +8,8 @@ Boot { *new { arg configPath, samplePath, serverOptions; var p; var c; var t; var s; var d; var e; var b; - - 40.do({Post.nl}); BuboUtils.banner().postln; Server.killAll; - MIDIClient.init; if (serverOptions == nil, { "-> Booting using default server configuration".postln; @@ -68,12 +65,14 @@ Boot { Safety.setLimit(1); e = currentEnvironment; + + MIDIClient.init; }); } *installServerTreeBehavior { - 40.do({Post.nl}); + CmdPeriod.add({ BuboUtils.stop().postln; // Printing session state when the session is stopped @@ -82,19 +81,6 @@ Boot { this.clock.numPeers, Server.default.avgCPU.round(2), Server.default.peakCPU.round(2)).postln; - - // // This Routine prints the current server state - // Tdef(\log, { - // loop { - // "[TIME: %] | [TP: %/%] | [CPU: % ]".format( - // BuboUtils.timer(), - // TempoClock.default.bar, - // TempoClock.default.beats % TempoClock.default.beatsPerBar + 1, - // Server.default.avgCPU.asInteger - // ).postln; - // 1.0.wait; - // } - // }).play; }, Server.default); Event.addEventType(\buboLoopEvent, { diff --git a/Classes/BuboNodeProxy.sc b/Classes/BuboNodeProxy.sc index 654abbc..3dcbea0 100644 --- a/Classes/BuboNodeProxy.sc +++ b/Classes/BuboNodeProxy.sc @@ -89,10 +89,6 @@ var quant = this.getQuantFromPattern(pattern); var fade = this.getFadeFromPattern(pattern); pattern = EventShortener.process(pattern, this.key, 'pmono', 1); - pattern.do({ - arg i; - i.postln; - }); this[0] = Pmono(*pattern); this.prepareToPlay(this, quant, fade); ^this diff --git a/README.md b/README.md index 97b215e..44b81eb 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,21 @@ -# BuboQuark: Simple, hassle-free live coding +# BuboQuark: A Live Coding Companion -This repository is a collection of methods and hacks that I found to make live -coding easier on **SuperCollider**. There is a [small companion website](https://bubobubobubobubo.github.io/BuboQuark/#/) that will tell you more about it. +This repository is a collection of methods, hacks and tips I found to make live coding easier on **SuperCollider**. + +## What is BuboQuark? + +BuboQuark is an experimental and not-yet-ready Quark (a plugin) for SuperCollider. It adds a few methods, objects and operators that make live coding easier on stage. It is inspired by a long tradition of high-level frameworks such as FoxDot, TidalCycles, [Sardine](https://sardine.raphaelforment.fr) and so on. It is also inspired by the trove of techniques that people shared for nearly twenty years about using SuperCollider as a battleproof performance tool. + +BuboQuark is initialized using the `Boot()` command and adds the following features: +- automatic handling of an audio sample library +- operators for creating patterns on-the-fly: `=>`, `->`, `==`, `>>`, `>>+` +- convenience methods for adding FXs to an existing pattern +- patterning capabilities (`pat:`) key + other shortcuts ## Contributions Contributions are welcome! If you have a technique/method that you think is worth sharing, please open a pull request. If you have any questions, feel free to open an issue. There might be some things that I missed, or that could be improved. Please, let me know! + +## About the website + +There is a [small companion website](https://bubobubobubobubo.github.io/BuboQuark/#/) that initially came with the repo but I never updated it properly :). It will host a tutorial when things will settle in the distant future. diff --git a/dev_sessions/midi_cc.scd b/dev_sessions/midi_cc.scd index d695493..834daad 100644 --- a/dev_sessions/midi_cc.scd +++ b/dev_sessions/midi_cc.scd @@ -9,9 +9,8 @@ m = MIDIOut.newByName("MIDI", "Bus 1"); ~test >> [ midiout: m, degree: [0, 2, 4, 5].pxrand(inf), - chan: 1, - dur: [5,8,0].eu / 4, octave: 5, - amp: 1/2, + chan: 1, dur: [5,8,0].eu / 4, + octave: 5, amp: 1/2, ]; ~test.play; ) @@ -44,33 +43,29 @@ m = MIDIOut.newByName("MIDI", "Bus 1"); ( m = MIDIOut.newByName("MIDI", "Bus 1"); ~test >> [ - pat: "[0 3 5 3, [0,<3 5>,<7 10>]]/2", + scale: Scale.dorian, + pat: "<[[0, 3, 6] 1 2 3] [[0, 4, 7] 5 6 7]>/2", midiout: m, amp: [0.0, 1.0].pwhite(inf), - octave: 4, - chan: [0, 1].pxrand(inf), - release: 0.125/4, - legato: 0.1, + octave: [6], legato: 0.5, + chan: 1, release: 1/8, ]; ~test.play; -) - -// NOTE: Je vais jouer avec jusqu'à ce qu'il casse -( -m = MIDIOut.newByName("MIDI", "Bus 1"); -~a = Pbind( - \type, \midi, - \midicmd, \control, - \ctlNum, [20,25].pseq(inf), - // chan est optionnel - \midiout, m, - \dur, [1,1/2].pseq(inf), - \val, Pseq([50, 100], inf), - \test, Pfunc { - |e| e.postln; e - } -); -~a.play; +~other >> [ + scale: Scale.dorian, + pat: "<[[0, 3, 6] 1 2 3] [[0, 4, 7] 5 6 7]>", + midiout: m, + amp: [0.0, 1.0].pwhite(inf), + octave: [ + [5, 5, 6].pseq(8), + [4, 5, 7].pseq(8), + ].pseq(inf), + legato: 0.5, + chan: 1, release: 1/8, +]; +~other.play; +~ground => [pat: "[kick:3!2, snare:3]/2", amp: 12]; +~ground.play; ) ( @@ -93,28 +88,3 @@ SynthDef('acid', { ) ~acid.source - -( -~a = Pmono( - 'acid', \freq, [100, 150, 200, 400].pxrand(inf), - \dur, 1/2, -); -~a.play; -) - -( -~a = Pmono(*[ - 'acid', freq: [100, 150, 200, 400].pxrand(inf), - dur: 1/2, -]); -~a.play; -) - -( -a = Pmono( - 'acid', \note, [0, 2].pseq(inf), - \dur, [1, 1/2].pxrand(inf), - \release, 0.12 -); -a.play; -)