From 38670a6931f3ce52a8c65765484370590caa9f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Forment?= Date: Tue, 14 May 2024 00:39:38 +0200 Subject: [PATCH] Broken state but progress --- .DS_Store | Bin 6148 -> 6148 bytes Classes/.DS_Store | Bin 6148 -> 6148 bytes Classes/BuboBoot.sc | 30 ++--- Classes/BuboNodeProxy.sc | 5 +- Classes/Configuration/Synthdefs.scd | 7 +- Classes/EffectChain.sc | 9 ++ Classes/EventShortener.sc | 28 ++-- dev_sessions/with_midi.scd | 193 ++++++++++++++++++++++++++++ with_midi.scd | 66 ---------- 9 files changed, 237 insertions(+), 101 deletions(-) create mode 100644 Classes/EffectChain.sc create mode 100644 dev_sessions/with_midi.scd delete mode 100644 with_midi.scd diff --git a/.DS_Store b/.DS_Store index 304f7a675e8638c1da50ce62f63f90116acea7c9..fd396379ddb6e1529f08e329fa94c10fd290c651 100644 GIT binary patch delta 162 zcmZoMXffEJ#uWSS9RmXc3xgg*IzuKyNp8N2OHxjL5>SjI(DAgq{?DV1sPZXz@0dEMexznT1jNo4XpCLRP=k%@7`WMO7g=18R* Plf9W`LGSYE!VNRmE;_ SK?bq|5+)Yj+04%ImmdI|ol3d@ delta 115 zcmZoMXfc@J&nU1lU^g?Pz~p%>a+9@K_?SdH!ORF29=6S%d`-vROrFD{Fu4nvtH)?C z`83Nz=AUlYC$DFf2GeI*lR0ADZtt6V?5N{p0XDJ8er#OKK!M58Y&siD8yGjUbNuB8 E01)aa-2eap diff --git a/Classes/BuboBoot.sc b/Classes/BuboBoot.sc index c16c71b..9c53355 100644 --- a/Classes/BuboBoot.sc +++ b/Classes/BuboBoot.sc @@ -55,22 +55,22 @@ Boot { // Post actions: installing behavior after server boot Server.default.waitForBoot({ if (false) { - d = (); + // d = (); // Exceptional Dual Sardine Boot - d.dirt = SuperDirt(2, s); - d.dirt.fileExtensions = ["wav","aif","aiff","aifc","mp3"]; - d.dirt.loadSoundFiles("/Users/bubo/Library/Application\ Support/Sardine/SON/*"); - d.dirt.loadSoundFiles("/Users/bubo/.config/livecoding/samples/*"); - d.dirt.doNotReadYet = true; - d.dirt.start(57120, [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]); - ( - d.d1 = d.dirt.orbits[0]; d.d2 = d.dirt.orbits[1]; d.d3 = d.dirt.orbits[2]; - d.d4 = d.dirt.orbits[3]; d.d5 = d.dirt.orbits[4]; d.d6 = d.dirt.orbits[5]; - d.d7 = d.dirt.orbits[6]; d.d8 = d.dirt.orbits[7]; d.d9 = d.dirt.orbits[8]; - d.d10 = d.dirt.orbits[9]; d.d11 = d.dirt.orbits[10]; d.d12 = d.dirt.orbits[11]; - ); - d.dirt.soundLibrary.addMIDI(\midi, MIDIOut.newByName("MIDI", "Bus 1")); - d.dirt.soundLibrary.addMIDI(\midi2, MIDIOut.newByName("MIDI", "Bus 2")); + // d.dirt = SuperDirt(2, s); + // d.dirt.fileExtensions = ["wav","aif","aiff","aifc","mp3"]; + // d.dirt.loadSoundFiles("/Users/bubo/Library/Application\ Support/Sardine/SON/*"); + // d.dirt.loadSoundFiles("/Users/bubo/.config/livecoding/samples/*"); + // d.dirt.doNotReadYet = true; + // d.dirt.start(57120, [ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]); + // ( + // d.d1 = d.dirt.orbits[0]; d.d2 = d.dirt.orbits[1]; d.d3 = d.dirt.orbits[2]; + // d.d4 = d.dirt.orbits[3]; d.d5 = d.dirt.orbits[4]; d.d6 = d.dirt.orbits[5]; + // d.d7 = d.dirt.orbits[6]; d.d8 = d.dirt.orbits[7]; d.d9 = d.dirt.orbits[8]; + // d.d10 = d.dirt.orbits[9]; d.d11 = d.dirt.orbits[10]; d.d12 = d.dirt.orbits[11]; + // ); + // d.dirt.soundLibrary.addMIDI(\midi, MIDIOut.newByName("MIDI", "Bus 1")); + // d.dirt.soundLibrary.addMIDI(\midi2, MIDIOut.newByName("MIDI", "Bus 2")); }; s.latency = 0.3; diff --git a/Classes/BuboNodeProxy.sc b/Classes/BuboNodeProxy.sc index 6427741..b81acd3 100644 --- a/Classes/BuboNodeProxy.sc +++ b/Classes/BuboNodeProxy.sc @@ -64,6 +64,9 @@ pattern = EventShortener.process( pattern, this.key, \buboEvent, 0 ); + pattern = EffectChain.process( + pattern, this.key + ); this[0] = Pbind(*pattern); this.prepareToPlay(this, quant, fade); ^this @@ -94,7 +97,7 @@ pattern, this.key, 'pmono', 0 ); this[0] = Pmono(*pattern); - this.prepareToPlay(this; quant, fade); + this.prepareToPlay(this, quant, fade); ^this } diff --git a/Classes/Configuration/Synthdefs.scd b/Classes/Configuration/Synthdefs.scd index f78912a..3b4ff5d 100644 --- a/Classes/Configuration/Synthdefs.scd +++ b/Classes/Configuration/Synthdefs.scd @@ -312,8 +312,6 @@ d.list = { arg obj; obj.keys.do({arg i; i.postln}); }; ); - - ( z = SynthDef('kraut', { /* @@ -325,13 +323,14 @@ d.list = { arg obj; obj.keys.do({arg i; i.postln}); }; */ arg out; var sweepFreq = XLine.ar(\freq.kr(400) * 1.99, \freq.kr, \attack.kr(0.05) / \time.kr(2)); - var frequencyBias = SinOsc.ar(\modSpeed.kr(1)).range(0.90, 1); + var frequencyBias = SinOsc.ar(\modSpeed.kr(8)).range(0.99, 1); var sin = SinOscFB.ar([ sweepFreq * \tune.kr(1) * frequencyBias, sweepFreq / \tune.kr * frequencyBias], feedback: \harmonics.kr(0.25)); var env = Env.perc(\attack.kr, \release.kr(0.5)).ar(doneAction: 2); - var sound = Safe.ar(sin.lincurve(-1, 1, -1, 1, \curve.kr(4))); + var sound = sin.lincurve(-1, 1, -1, 1, \curve.kr(4)); + sound = sound * \amp.kr(-6).dbamp; OffsetOut.ar(out, DirtPan.ar(sound, ~dirt.numChannels, \pan.kr(0), env)) }).add; d.kraut = z; diff --git a/Classes/EffectChain.sc b/Classes/EffectChain.sc new file mode 100644 index 0000000..aeac146 --- /dev/null +++ b/Classes/EffectChain.sc @@ -0,0 +1,9 @@ +EffectChain { + + *process { + arg pattern, key; + + ^pattern + } + +} diff --git a/Classes/EventShortener.sc b/Classes/EventShortener.sc index ee1b5b7..3ed391b 100644 --- a/Classes/EventShortener.sc +++ b/Classes/EventShortener.sc @@ -2,28 +2,28 @@ EventShortener { *process { arg pattern, key, type, time; + var new_pattern; var additionalKeys = Dictionary.newFrom([ \midi, [ type: \midi, + midiCmd: \noteOn, ], \buboEvent, [ type: \buboEvent, ], \looper, [ type: \buboLoopEvent, - legato: 1, - time: time + legato: 1, time: time ], \pmono, [], ]); - pattern = this.findShortcuts(pattern); - pattern = this.functionsToNdef(pattern, key); - pattern = pattern ++ additionalKeys[type]; + new_pattern = this.findShortcuts(pattern); + new_pattern = this.functionsToNdef(new_pattern, key); + new_pattern = new_pattern ++ additionalKeys[type]; if (pattern.includes('pat'), { - pattern = this.patternize(pattern, type); + new_pattern = this.patternize(new_pattern, type); }); - pattern.postln; - ^pattern + ^new_pattern } *patternize { @@ -41,9 +41,7 @@ EventShortener { }, { additionalKeys = [\trig, \delta, \dur, \str, \num]; }); - new_pattern = new_pattern ++ [ - additionalKeys, temp - ]; + new_pattern = new_pattern ++ [additionalKeys, temp]; new_pattern = new_pattern ++ [ degree: Pfunc({ |e| if (e.trig > 0, { @@ -56,15 +54,15 @@ EventShortener { if (type !== 'midi', { if (pattern.includes('i') || pattern.includes('instrument') == false, { new_pattern = new_pattern ++ [ - sp: Pkey(\str), - nb: Pkey(\num), + sp: Pfunc { |e| e.str ? "kick" }, + nb: Pfunc { |e| e.num ? 0 }, + instrument: Pfunc { |e| e.str.isNil && e.num.isNil ? "default" }, fast: 1, ]; }); }) }, { - new_pattern.add(a); - new_pattern.add(b); + new_pattern = new_pattern ++ [a, b]; }); }) }); diff --git a/dev_sessions/with_midi.scd b/dev_sessions/with_midi.scd new file mode 100644 index 0000000..69faddf --- /dev/null +++ b/dev_sessions/with_midi.scd @@ -0,0 +1,193 @@ +// == BACKLOG PERFORMANCE SAINT NAZAIRE == +// TODO: ajouter un truc pour tuer tout le MIDI quand j'appuie sur F12 +// TODO: simplifier l'émission de control change (c'est un type d'event) +// TODO: pourquoi le MIDI se comporte si bizarrement ? ('uid' not understood) + +// BUG: Evalue moi +m = MIDIOut.newByName("MIDI", "Bus 1"); + +// NOTE: Pattern rythmique de base +( +~test => [ sp: "kick", nb: 0]; +~test.play; +) + +// NOTE: Pattern avec Pmini +( +~test => [ pat: "kick:4 snare:3" ]; +~test.play; +) + +// NOTE: Pattern sans numéro maintenant ! +( +~test => [ pat: "[kick hat snare hat]/2" ]; +~test.play; +) + +Bank.list + +Sweep.help + +( +~rhythm => [ + pat: "[kick:11(3,8)/2, hat:4(5,8)/2, fsnare:2(1,8)/4]", + rate: [1, 0.5], release: 0.5, +]; +~rhythm.fx1(0.1, { + arg in; + var sound = CombC.ar(in, 2, c.dur / 4, LFNoise0.kr(c.dur * 2).range(0.01, 1)); + sound = MiVerb.ar(sound, time: 0.1); + sound +}); +~rhythm.play; +) + +~basse => [ + pat: "0(5,8)/2", + i: "kraut", + pan: {SinOsc.ar(c.dur / 4).range(-0.5, 0.5)}, + harmonics: { + Sweep.kr( + Impulse.kr(c.dur*2), + rate: 0.5 + ).linlin(0,1,0,2,\minmax)}, + tune: [1, 2], amp: -2, release: 1, octave: 3, +]; +~basse.fx1(0.5, { + arg in; + MiVerb.ar(in, time:0.3) +}); +~basse.play; +~plop => [ + pat: "[sound:4 4modular:5 sound:6 4modular:8]/4", + pan: {SinOsc.ar(c.dur/4)}, + rate: { + Sweep.ar(c.dur / 4, 1).linlin(0, 4, 0, 1, \minmax) + }, release: [1, 2, 3, 1].pseq(inf), +]; +~plop.mold(2); +~plop.fx1(0.5, {arg in; MiVerb.ar(in, 0.2)}); +~plop.play; +) + +// NOTE: changer amp de place cause une erreur (wtf?) +( +m = MIDIOut.newByName("MIDI", "Bus 1"); +~test >> [ + pat: "[[0 2 3 7 0 3 5 7 0 5 8 12 0 1 2 7]/4, [-7 -0]]/2", + chan: 0, + velocity: 10, + midiout: m +]; +~test.play; +) + +"uid".help + +// NOTE: reproduction avec un pattern conventionnel +( +m = MIDIOut.newByName("MIDI", "Bus 1"); +~test = Pbind( + \type, 'midi', + \degree, [0,2,3,4].pseq(inf), + \amp, Pwhite(0.0, 1.0, inf), + \midiout, m +); +) + +// NOTE: MIDI très fancy ! +( +m = MIDIOut.newByName("MIDI", "Bus 1"); +~test >> [ + pat: "[0 ~ 2 3 4]/2", midiout: m, + chan: 0, amp: [0.5, 0.7].pwhite(inf), + bob: {SinOsc.ar(2).range(1,120)}, + control: 20, + da: Pfunc { + |e| + m.control(0, e.control, e.bob.asInteger) + } +]; +~test.play; +) + +~test.source.patternpairs + + +m.control(0, 20, 40) + + +// NOTE: Sans pattern Pmini +( +m = MIDIOut.newByName("MIDI", "Bus 1"); +~test >> [ degree: [0, 2, 3, 4].pseq(inf), midiout: m ]; +~test.play; +) + +// NOTE: Avec Pmini + type explicite +( +m = MIDIOut.newByName("MIDI", "Bus 1"); +~test >> [type: 'midi', pat: "0 1 2 3", midiout: m]; +~test.play; +) + +// NOTE: Avec Pmini, sans type explicite +( +m = MIDIOut.newByName("MIDI", "Bus 1"); +~test >> [pat: "0 1 2 3", midiout: m]; +~test.play; +) + +// NOTE: : Pattern de démonstration +( +~baba = Pbind( + \type, \midi, + [\trig, \delta, \dur, \str, \num], Pmini("[1 ~ 2 3 4]/2").trace, + \degree, Pfunc({ |e| if(e.trig > 0) { e.str.asInteger } { \rest } }), + \midiout, m +); +~baba.play; +) + +~a = [ + +]; +~a.play; + + +( +~ground => [pat: "[kick:2(5,16)/16, fgood:11/2]", release: 4]; +~snare => [pat: "[~ snare]/16", release: 4]; +~snare.fx1(0.7, {arg in; MiVerb.ar(in, time: 0.7)}); +~hat => [pat: "[sound:2|hat:5] hat:2 hat:3!2", release: 1/32, + amp: [0.0,-12.0].pwhite(inf) +]; +~hat.play; +~snare.play; +~ground.play; +~vorb => [ + instrument: 'kraut', + octave: 4, + amp: -12, curve: -2, tune: [0, [2, 4, 8].pseq(inf)], + release: {LFNoise0.kr(c.dur).range(0.1, 1)} * 4, + scale: Scale.chromatic, + modSpeed: 8, pat: "[0(5,8) 3(5,8)]/8", +]; +~vorb.play; +~apply => [ + instrument: 'kraut', + octave: [5, 6].pxrand(inf), + amp: -12, curve: -2, tune: 2, + release: {LFNoise0.kr(c.dur).range(0.1, 1)}, + scale: Scale.chromatic, pan: 0.0, + modSpeed: 8, pat: "[[0 [3|~] 7 10]/2 [0 <[2 5 7 3] 3 [2 5] [3 12]> 7 10]/2]/2", +]; +~apply.fx1(0.5, { + arg in; + MiVerb.ar(in, time: 0.8) +}); +~apply.play; +) + +nil.isNil + diff --git a/with_midi.scd b/with_midi.scd deleted file mode 100644 index f7e8cd0..0000000 --- a/with_midi.scd +++ /dev/null @@ -1,66 +0,0 @@ -// NOTE: ajouter un truc pour tuer tout le MIDI quand j'appuie sur F12 - - - -// NOTE: Pattern rythmique de base -( -~test => [ sp: "kick", nb: 0 ]; -~test.play; -) - -// NOTE: Pattern de base, explicite (sans clés magiques) -( -~test = Pbind( - \instrument, 'splayer', - \sp, Bank("kick")[0], -); -~test.play; -) - - -( -~test >> [ - pat: "0 2 3 4", - midiout: m -]; -~test.play; -) - -( -m = MIDIOut.newByName("MIDI", "Bus 1"); -~test >> [ pat: "0 2 3 4", midiout: m ]; -~test.play; -) - - -// NOTE: Sans pattern Pmini -( -m = MIDIOut.newByName("MIDI", "Bus 1"); -~test >> [ degree: [0, 2, 3, 4].pseq(inf), midiout: m ]; -~test.play; -) - -// NOTE: Avec Pmini + type explicite -( -m = MIDIOut.newByName("MIDI", "Bus 1"); -~test >> [type: 'midi', pat: "0 1 2 3", midiout: m]; -~test.play; -) - -// NOTE: Avec Pmini, sans type explicite -( -m = MIDIOut.newByName("MIDI", "Bus 1"); -~test >> [pat: "0 1 2 3", midiout: m]; -~test.play; -) - -// NOTE: : Pattern de démonstration -( -~baba = Pbind( - \type, \midi, - [\trig, \delta, \dur, \str, \num], Pmini("[1 ~ 2 3 4]/2").trace, - \degree, Pfunc({ |e| if(e.trig > 0) { e.str.asInteger } { \rest } }), - \midiout, m -); -~baba.play; -)