From: Eugene Petkevich Date: Tue, 14 May 2024 23:15:00 +0000 (+0200) Subject: add synth + impro X-Git-Url: https://git.zuelum.org/?a=commitdiff_plain;h=HEAD;p=scprojects.git add synth + impro --- diff --git a/extensions/classes/splitters.sc b/extensions/classes/splitters.sc index 9961448..ad58995 100644 --- a/extensions/classes/splitters.sc +++ b/extensions/classes/splitters.sc @@ -1,3 +1,32 @@ +Psplit : FilterPattern { + var <>passes, <>weights; + + *new { arg pattern, passes=1, weights=#[11, 10, 1]; + ^super.new(pattern).passes_(passes).weights_(weights) + } + + storeArgs { ^[pattern, passes, weights] } + + embedInStream { arg inval; + var stream, outval; + stream = pattern.asStream; + loop { + outval = stream.next(inval); + if (outval.isNil) { ^inval }; + outval = outval.split(passes, weights); + outval.do{arg v; + inval = yield(v); + }; + } + } +} + ++ Pattern { + split {|passes=1, weights=#[11, 10, 1]| + ^Psplit(this, passes, weights) + } +} + + Array { split {|passes=1, weights=#[11, 10, 1]| var arr = this; @@ -21,29 +50,4 @@ split {|passes=1, weights=#[11, 10, 1]| ^[this].split(passes=passes, weights=weights) } -} - -/* -Psplit : FilterPattern { - var <>passes, <>weights; - *new { arg pattern, passes=1, weights=#[11, 10, 1]; - ^super.newCopyArgs(pattern, repeats, key) - } - storeArgs { ^[pattern, passes, weights] } - embedInStream { | event | - passes.value(event).do{|i| - event = pattern.embedInStream(event); - var newArr = []; - arr.do{|val| - var divider = Array.series(nweights.size, 1).wchoose(nweights); - var newVal = val / divider; - divider.do{ - newArr = newArr.add(newVal); - }; - }; - arr = newArr; - }; - ^event; - } -} -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/temp.scd b/temp.scd index cd15bd9..8502f2f 100644 --- a/temp.scd +++ b/temp.scd @@ -348,4 +348,13 @@ fork { // bcr2000 test -~dijutu = MidiBcr(false, \dijutu); \ No newline at end of file +~dijutu = MidiBcr(false, \dijutu); + +// pattern design + +( +var a, b; +a = Preject({ arg item; item == 6}, Pseq([1, Prand([2, 5, 6], 3), 7],inf)); +x = a.asStream; +9.do({ x.next.postln; }); +) \ No newline at end of file diff --git "a/\320\232\320\260/\320\232\320\260\321\204\321\203\320\273 35.7.4.2 2024-05-14 \342\213\206 \322\252\321\217\324\213\320\276\324\217\320\276/\320\232\320\260\321\204\321\203\320\273-\322\252\321\217\324\213\320\276\324\217\320\276.scd" "b/\320\232\320\260/\320\232\320\260\321\204\321\203\320\273 35.7.4.2 2024-05-14 \342\213\206 \322\252\321\217\324\213\320\276\324\217\320\276/\320\232\320\260\321\204\321\203\320\273-\322\252\321\217\324\213\320\276\324\217\320\276.scd" new file mode 100644 index 0000000..caef6e8 --- /dev/null +++ "b/\320\232\320\260/\320\232\320\260\321\204\321\203\320\273 35.7.4.2 2024-05-14 \342\213\206 \322\252\321\217\324\213\320\276\324\217\320\276/\320\232\320\260\321\204\321\203\320\273-\322\252\321\217\324\213\320\276\324\217\320\276.scd" @@ -0,0 +1,214 @@ +~kedi = MidiRemote25SL(); + +( +~m = KeySynth(~kedi, \hocugabo, amp: 0.2, panAcross: true); +~m.params[\out] = a.h; +) + +( +~m.params[\modAmp] = 0.0; +~kedi.press_{|v| + v = v * 0.01; + ~m.group.set(\modAmp, v); + ~m.params[\modAmp] = v; +}; + +~kedi.lowrot_{|v, n| + var bindExp = {|param, minVal, maxVal| + var value = v.linexp(0, 1, minVal, maxVal); + ~m.group.set(param, value); + ~m.params[param] = value; + (param++": "++value.asStringPrec(4)).postln; + }; + switch(n) + { 6 } { bindExp.(\cut, 0.50, 8000); } + { 7 } { bindExp.(\mixFreq, 0.01, 100); } + {}; +}; +) + +~m.free + +// + +~midiup.(); + +( +SynthDef(\hocugabo, { + | out=0, gate=1, freq=440, amp=1, pan=0, doneAction=2, cut=800, rez=0.8, modFreq=10, modAmp=0.01, release=1.0, mixFreq=5 | + var sig = 0, hisig = 0; + var panDelay = 0.005; + var makeSig = {|freq| + var sig = 0; + var modFreqOsc = SinOsc.kr(modFreq, 0, modAmp, 1); + var widthOsc = SinOsc.kr(modFreq/31, Rand(0, 2pi)).range(0.2, 0.8); + var mix = SinOsc.kr(mixFreq, Rand(0, 2pi)).range(0, 1); + sig = sig + (Pulse.ar(freq * modFreqOsc, widthOsc) * mix); + sig = sig + (Saw.ar(freq * modFreqOsc) * (1-mix)); + }; + sig = makeSig.(freq); + [3, 7, 19/2].do{|v, i| + hisig = hisig + (makeSig.(freq*v)/(v*(i+1)*(i+1))); + }; + sig = RLPF.ar(sig, cut, rez); + sig = sig * EnvGen.ar(Env.adsr(decayTime: 0.1, releaseTime: release), gate, doneAction: doneAction); + sig = sig + hisig; + sig = Pan2.ar(sig, pan); + Out.ar(out, sig * amp/2); +}).add; +) + +//11-9-11-11-7-9-11 + +( +Pdef(\test, Pbind(*[ + instrument: \hocugabo, + db: -10, + out: a.h, + octave: 3, + note: Pseq([11, 9, 11, 11, 7, 9, 11], inf), + dur: Pseq([2, 2, 2, 2, 3, 3, 2].split/4, inf), + cut: [800, 1600], + rez: 0.8, + modFreq: 6, + modAmp: 0.01, + mixFreq: 1.5, + release: 0.5, + legato: 0.5, +])).quant_(1).play; +) + +// etude song + +History.clear.end; +History.start; + +( +~createGroupsBusses = { + ~instrumentGroup = Group(s); + ~effectGroup = Group.after(~instrumentGroup); + ~masterGroup = Group.after(~effectGroup); + + ~mainBus = Bus.audio(s, 2); + ~masterer = Synth(\masterer, ( + in: ~mainBus, + out: a.h, + amp: -6.dbamp, + lookAheadTime: 0.05, + ).asPairs, ~masterGroup); + + ~numReverbs = 3; + ~jpverbs = Array(); + ~reverbBuses = Array(); + ~numReverbs.do{|i| + ~reverbBuses = ~reverbBuses.add(Bus.audio(s, 2)); + ~jpverbs = ~jpverbs.add(Synth(\qahe, ( + mix: i*1/~numReverbs+0.1, + t60: 1.0.rrand(10.0), + damp: 0.0.rrand(1.0), + size: 1.0.rrand(4.0), + earlyDiff: 0.5.rrand(0.9), + modDepth: 0.0.rrand(0.05), + modFreq: 2.0.rrand(15.0), + low: 0.7.rrand(1.0), + mid: 0.7.rrand(1.0), + high: 0.7.rrand(1.0), + lowcut: 500.0, + highcut: 2000.0, + in: ~reverbBuses.last, + out: ~mainBus, + ).asPairs, ~effectGroup)); + }; +}; +ServerTree.removeAll; +ServerTree.add(~createGroupsBusses); +) + +( +s.recorder.filePrefix = "Ҫяԋоԏо_main_"; +s.record(bus: ~mainBus); + +~r = Recorder(s); +~r.filePrefix = "Ҫяԋоԏо_master_"; +~r.record(bus: a.h); +) + +( +s.stopRecording; +~r.stopRecording; +) + +// finishing + +History.end; +History.saveCS(PathName(thisProcess.nowExecutingPath).parentPath+/+"history-cs.scd"); +History.saveStory(PathName(thisProcess.nowExecutingPath).parentPath+/+"history-story.scd"); + +/// patterns + +~dur2 = Pseq([3, 3, 2].split(4), inf); +~dur3 = Pseq([2, 2, 2, 2, 3, 3, 2].split(1)/4, inf); +~dur4 = Pseq([2, 2, 2, 2, 3, 3, 2].split(1)/4, inf); + +( +Pdef(\melody2, Pbind(*[ + instrument: \hocugabo, + db: -10, + pan: Pseq([-0.6, 0.6], inf), + out: Prand(~reverbBuses, inf), + group: ~instrumentGroup, + octave: 2, + note: Pseq([11, 9, 11, 11, 7, 9, 11], inf), + dur: ~dur2, + cut: 600, + rez: 0.8, + modFreq: 6, + modAmp: 0.01, + mixFreq: 1.5, + release: Pwhite(0.2, 0.4), + legato: 0.2, + pass: Pseq([1, \r, \r], inf), +])).quant_(4).play; +) + +( +Pdef(\melody3, Pbind(*[ + instrument: \hocugabo, + db: -10, + pan: Pseq([-0.7, 0.7], inf), + out: Prand(~reverbBuses, inf), + group: ~instrumentGroup, + octave: 3, + note: Pseq([11, 9, 11, 11, 7, 9, 11], inf), + dur: ~dur3, + cut: 800, + rez: 0.8, + modFreq: 6, + modAmp: 0.01, + mixFreq: 1.5, + release: Pwhite(0.5, 0.8), + legato: 0.5, + pass: Pseq([1, 1, 1], inf), +])).quant_(4).stop; +) + +( +Pdef(\melody4, Pbind(*[ + instrument: \hocugabo, + db: -12, + pan: Pseq([0.7, -0.7], inf), + out: Prand(~reverbBuses, inf), + group: ~instrumentGroup, + octave: 4, + note: Pseq([11, 9, 11, 11, 7, 9, 11], inf), + dur: ~dur4, + cut: 1600, + rez: 0.8, + modFreq: 6, + modAmp: 0.01, + mixFreq: 1.5, + release: Pwhite(0.5, 0.8), + legato: 0.5, + pass: Pseq([1, 1, 1], inf), +])).quant_(4).stop; +) \ No newline at end of file