@ -0,0 +1,77 @@
|
|||||||
|
s.boot;
|
||||||
|
|
||||||
|
~dict = BmDspAlgs.getDict("synths/bass/saw_bass.scd");
|
||||||
|
~dict[\postAmp] = true;
|
||||||
|
~dict[\useEnv] = true;
|
||||||
|
|
||||||
|
~dict.makeSourceSynthDef().add();
|
||||||
|
|
||||||
|
~sawBass = ();
|
||||||
|
~sawBass[\name] = \saw;
|
||||||
|
|
||||||
|
Ndef(~sawBass[\name]).clear;
|
||||||
|
Ndef(~sawBass[\name]).ar(2);
|
||||||
|
Ndef(~sawBass[\name]).prime(~dict[\name]);
|
||||||
|
Ndef(~sawBass[\name]).play;
|
||||||
|
|
||||||
|
(
|
||||||
|
Tdef(\t, {
|
||||||
|
loop {
|
||||||
|
[40, 45, 47].do({|n|
|
||||||
|
Ndef(~sawBass[\name]).put(
|
||||||
|
n,
|
||||||
|
Ndef(~sawBass[\name]).source,
|
||||||
|
0,
|
||||||
|
[\freq, n.midicps, \gate, 1, \amp, 0.25, \release, 0.5, \attack, 0.01]
|
||||||
|
);
|
||||||
|
0.25.wait;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
Tdef(\t2, {
|
||||||
|
loop {
|
||||||
|
[55, 61].do({|n|
|
||||||
|
Ndef(~sawBass[\name]).put(
|
||||||
|
n,
|
||||||
|
Ndef(~sawBass[\name]).source,
|
||||||
|
0,
|
||||||
|
[\freq, n.midicps, \gate, 1, \amp, 0.25, \release, 0.1, \attack, 0.01]
|
||||||
|
);
|
||||||
|
(4/7).wait;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
Ndef(~sawBass[\name]).put( 159, \filter -> { arg in;
|
||||||
|
d = LPF.ar(in, 1100);
|
||||||
|
d
|
||||||
|
});
|
||||||
|
)
|
||||||
|
|
||||||
|
(
|
||||||
|
Ndef(~sawBass[\name]).put( 160, \filter -> { arg in;
|
||||||
|
var d = in;
|
||||||
|
var diffusion = \diffusion.kr(1);
|
||||||
|
var spacesize = \spacesize.kr(0.1);
|
||||||
|
8.do { |i|
|
||||||
|
d = AllpassC.ar(
|
||||||
|
d,
|
||||||
|
delaytime: LFNoise1.kr(0.01!2).range(0.01, spacesize),
|
||||||
|
decaytime: diffusion
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
d
|
||||||
|
});
|
||||||
|
)
|
||||||
|
|
||||||
|
Ndef(~sawBass[\name]).set(\diffusion, 0.03);
|
||||||
|
Ndef(~sawBass[\name]).set(\spacesize, 0.1);
|
||||||
|
|
||||||
|
Tdef(\t2).stop;
|
||||||
|
Tdef(\t).stop;
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
(
|
||||||
|
name: 'fft_freeze',
|
||||||
|
func: {
|
||||||
|
var in = In.ar(\in.kr(0), 1);
|
||||||
|
var isOn = \freezeGate.kr(0);
|
||||||
|
var chain = FFT(
|
||||||
|
LocalBuf(2048),
|
||||||
|
in
|
||||||
|
);
|
||||||
|
|
||||||
|
var frozen = PV_Freeze(chain, isOn);
|
||||||
|
var jittered = PV_PhaseShift(frozen, \phaseJitter.kr(0) * TRand.kr(0, 2pi) * isOn);
|
||||||
|
var sig = IFFT(jittered);
|
||||||
|
|
||||||
|
sig;
|
||||||
|
},
|
||||||
|
inChannels: 1,
|
||||||
|
outChannels: 2,
|
||||||
|
requiresBuffer: true,
|
||||||
|
usePan: true,
|
||||||
|
panning: \pan,
|
||||||
|
useSaturation: false,
|
||||||
|
saturationSteps: 4,
|
||||||
|
specs: (
|
||||||
|
freezeGate: [0, 1, \step, 1, 0],
|
||||||
|
phaseJitter: [0, 1, \lin, 0.01, 0.1],
|
||||||
|
),
|
||||||
|
)
|
||||||
@ -1,14 +1,19 @@
|
|||||||
+ NodeDictionary {
|
+ NodeDictionary {
|
||||||
makeBufferProcessingNdef {
|
makeBufferProcessingNdef {
|
||||||
| name, buf, quant = 1.0 |
|
| name |
|
||||||
var ndef = Ndef(name);
|
|
||||||
ndef.proxyspace.quant = quant;
|
var internalName = if(name.isNil, {this[\name]}, {name});
|
||||||
ndef[0] = SynthDef.wrap(
|
|
||||||
|
Ndef(internalName, {
|
||||||
|
var signal, gate;
|
||||||
|
|
||||||
|
gate = \gate.tr(0);
|
||||||
|
|
||||||
|
signal = SynthDef.wrap(
|
||||||
func: this[\func],
|
func: this[\func],
|
||||||
prependArgs: [buf]
|
|
||||||
);
|
);
|
||||||
|
|
||||||
ndef.play;
|
this.processSig(signal, gate);
|
||||||
^ndef;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,32 +1,18 @@
|
|||||||
+ NodeDictionary {
|
+ NodeDictionary {
|
||||||
makeBufferProcessingSynthDef {
|
makeBufferProcessingSynthDef {
|
||||||
SynthDef(this[\name], {
|
SynthDef(this[\name], {
|
||||||
var buf = \buf.kr;
|
var signal, gate;
|
||||||
var signal = SynthDef.wrap(
|
|
||||||
func: this[\func],
|
|
||||||
prependArgs: [buf]
|
|
||||||
);
|
|
||||||
|
|
||||||
signal = Pan2.ar(
|
gate = \gate.tr(0);
|
||||||
signal * \amp.kr(1),
|
|
||||||
\pan.kr(0)
|
|
||||||
);
|
|
||||||
|
|
||||||
if(this[\detectSilence].asBoolean, {
|
|
||||||
FreeSelf.kr(
|
|
||||||
DetectSilence.ar(
|
|
||||||
[signal[0], signal[1]] + Impulse.ar(0)
|
|
||||||
).product)
|
|
||||||
});
|
|
||||||
|
|
||||||
if(this[\limitDuration].asBoolean, {
|
signal = SynthDef.wrap(
|
||||||
Line.kr(0, 1, \dur.kr(1), doneAction: 2);
|
func: this[\func],
|
||||||
});
|
);
|
||||||
|
|
||||||
Out.ar(
|
Out.ar(
|
||||||
\out.kr(0),
|
\out.kr(0),
|
||||||
signal
|
this.processSig(signal, gate);
|
||||||
);
|
);
|
||||||
}).add;
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in new issue