+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;
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
--- /dev/null
+~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