426 lines
7.7 KiB
Plaintext
426 lines
7.7 KiB
Plaintext
// ===========================================================
|
|
// Ark/D, amorphic (2020)
|
|
// ===========================================================
|
|
(
|
|
Server.default.waitForBoot {
|
|
|
|
// library path
|
|
var libPath = PathName(thisProcess.nowExecutingPath.dirname +/+ "lib");
|
|
// samples path
|
|
var smpPath = PathName(thisProcess.nowExecutingPath.dirname +/+ "smp");
|
|
|
|
// load samples //
|
|
|
|
~smpBuffers.do(_.free); //- free all buffers so we don't accumulate?
|
|
~smpBuffers = List();
|
|
|
|
smpPath.filesDo({ |smpfile|
|
|
// tell me what you are loading:
|
|
postln("~~~ loading >" + smpfile.fileName + "<");
|
|
|
|
// add a sample into a buffer, store object to List
|
|
~smpBuffers.add(Buffer.readChannel(s, smpfile.fullPath, channels:[0]));
|
|
});
|
|
|
|
|
|
// load libs //
|
|
|
|
// for each files in that lib folder
|
|
libPath.filesDo({|afile|
|
|
// tell me what you're executing:
|
|
postln(" ." + afile.fileName);
|
|
|
|
// execute it:
|
|
this.executeFile(afile.fullPath);
|
|
});
|
|
|
|
|
|
});
|
|
|
|
s.meter;
|
|
s.scope(2);
|
|
s.plotTree
|
|
|
|
|
|
|
|
~smpBuffers.postln;
|
|
|
|
x = Synth(\softSaw);
|
|
|
|
y = Synth(\granulator, [\bufnum, ~smpBuffers.at(0)])
|
|
y.set(\amp,4)
|
|
y.set(\spread,1)
|
|
y.set(\pan, 0)
|
|
y.set(\gate, 0)
|
|
|
|
z = Synth(\bufPlayer, [\bufnum, ~smpBuffers.at(0)])
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
(
|
|
SynthDef(\sinPulz, {
|
|
arg gate = 1, freq, out=0, amp = 1, attackTime=0.01, releaseTime=1, oscDetune=0.05, cutoff=1;
|
|
var snd, env;
|
|
|
|
oscDetune = oscDetune * 0.1 + 1;
|
|
|
|
env = Linen.kr(gate, attackTime:attackTime, releaseTime:releaseTime, doneAction:2);
|
|
|
|
snd = SinOsc.ar([freq, freq*oscDetune]) ;
|
|
snd = snd + SinOsc.ar([freq*2, freq*oscDetune*2]) ;
|
|
snd = snd + Pulse.ar([freq/2,(freq/2)*oscDetune]) * LFNoise1.kr(0.5).exprange(2,40);
|
|
|
|
snd = snd.softclip;
|
|
snd = RLPF.ar(snd, freq:
|
|
//LFNoise1.kr(0.01).exprange(4000,300),
|
|
freq * cutoff,
|
|
rq:0.4);
|
|
|
|
snd = snd * env * amp * 0.4;
|
|
|
|
Out.ar(out, snd);
|
|
}).add;
|
|
)
|
|
|
|
// add a delay/reverb bus here?
|
|
|
|
// first press play :)
|
|
Ndef(\ba).play
|
|
|
|
// set default quant
|
|
Ndef(\ba).proxyspace.quant = 5;
|
|
|
|
(
|
|
Ndef(\ba,
|
|
Pbindf(
|
|
Ppar([
|
|
Pbind(
|
|
\octave, [4,5,7],
|
|
\amp, [0.1,0.2,0.005],
|
|
\degree, Pseq([0,3,4,2,6], inf),
|
|
\dur, Prand([1,0.5,2], inf),
|
|
),
|
|
Pbind(
|
|
\octave, [3,6],
|
|
\degree, Pseq([[0,-3],4,6,3,2], inf),
|
|
\dur, 3.5,
|
|
\amp, 0.2,
|
|
\legato, 0.6,
|
|
\attackTime, 2,
|
|
\releaseTime, 2,
|
|
)]),
|
|
// common parameters
|
|
\instrument, \sinPulz,
|
|
\oscDetune, Prand([1,3,7]*0.01, inf),
|
|
\scale, Scale.minor.tuning_(\just),
|
|
\cutoff, Prand([1,2,3,4,5,6], inf)
|
|
|
|
)
|
|
|
|
|
|
)
|
|
)
|
|
////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//testng patterns
|
|
|
|
(
|
|
Pbind(
|
|
\instrument, \softSaw,
|
|
\octave, 2,
|
|
\degree, Pseq([2,5,4,1], inf),
|
|
\dur, 3,
|
|
\legato, 1,
|
|
\amp, 0.5,
|
|
\releaseTime, 0
|
|
).play;
|
|
)
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// PlayBufer:
|
|
(
|
|
SynthDef(\bufPlayer, {|out = 0, bufnum = 0 |
|
|
Out.ar(out,
|
|
PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum), loop: 1.0)
|
|
)
|
|
}).play(s, [\bufnum, ~smpBuffers.at(0)]);
|
|
)
|
|
|
|
~bufplay = Synth(\bufPlayer, [ \bufnum, ~smpBuffers.at(0)])
|
|
|
|
(
|
|
SynthDef(\granulator, {
|
|
arg out = 0, bufnum = ~smpBuffers.ar(0), dur=0.2, freq=140, amp=0.2;
|
|
var snd;
|
|
|
|
snd = GrainBuf.ar(numChannels: 2,
|
|
trigger: Impulse.kr(freq * LFNoise0.kr(freq).range(0.5,1.5)),
|
|
dur: dur,
|
|
sndbuf: bufnum,
|
|
rate: [0.2,0.3,0.4,0.5],
|
|
pos:LFTri.ar(0.0001, iphase:[0.5,1,0,2]).range(0,1),
|
|
interp: 4,
|
|
maxGrains: 1024,
|
|
pan: [
|
|
LFNoise1.kr(0.1).range(-1,1),
|
|
LFNoise1.kr(0.1).range(-1,1),
|
|
LFNoise1.kr(0.1).range(-1,1),
|
|
LFNoise1.kr(0.1).range(-1,1)
|
|
]
|
|
);
|
|
|
|
snd = Splay.ar(snd, spread:1);
|
|
|
|
Out.ar(out, snd * amp);
|
|
}).play;
|
|
)
|
|
|
|
~smpBuffers.do(_.free);
|
|
~smpBuffers.at(0).free;
|
|
s.meter
|
|
|
|
(
|
|
SynthDef("sawM", {
|
|
arg out=0, freq=140, gate=1, fadeTime=1, amp=0.5;
|
|
var snd, env;
|
|
|
|
snd = Saw.ar({freq/2 * LFNoise1.ar().range(0.95,1.05) } ! 2)
|
|
+ Saw.ar({freq * LFNoise1.ar().range(0.95,1.05) } ! 2, )
|
|
//+ (Saw.ar({freq * 2 * LFNoise1.ar().range(0.95,1.05) } ! 2) * 0.4)
|
|
// + (Saw.ar({freq * 4 * LFNoise1.ar().range(0.95,1.05) } ! 2) * 0.2)
|
|
;
|
|
//snd = Saw.ar({freq/2 * LFNoise1.ar().range(0.95,1.05)} ! 4);
|
|
//snd = snd + Saw.ar([freq/2,freq]/2 * LFNoise1.ar().range(0.95,1.05))!3;
|
|
snd = Splay.ar(snd, spread:1, level:1, center:0);
|
|
env = EnvGen.kr( Env([0, 1, 0], [fadeTime, fadeTime], \sin, 1),
|
|
gate, doneAction: Done.freeSelf);
|
|
|
|
snd = snd * env * amp;
|
|
|
|
Out.ar(out, snd);
|
|
}).play;
|
|
);
|
|
s.scope
|
|
|
|
// load samples
|
|
|
|
|
|
|
|
// load busses
|
|
|
|
|
|
|
|
// load patterns
|
|
|
|
2.rand
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(
|
|
x = { arg spread=1, level=1, center=0.0;
|
|
Splay.ar(
|
|
SinOsc.ar( { |i| LFNoise2.kr(1).exprange(200, 4000) } ! 10),
|
|
spread,
|
|
level,
|
|
center
|
|
);
|
|
}.play;
|
|
)
|
|
|
|
|
|
|
|
b = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01.wav");
|
|
|
|
(
|
|
x = {
|
|
arg out = 0, bufnum, dur=0.2, freq=140, amp=0.5;
|
|
var snd;
|
|
|
|
snd = GrainBuf.ar(numChannels: 2,
|
|
trigger: Impulse.kr(freq * LFNoise0.kr(freq).range(0.5,1.5)),
|
|
dur: dur,
|
|
sndbuf: bufnum,
|
|
rate: [0.2,0.3,0.4,0.5],
|
|
pos:LFTri.ar(0.01, iphase:[0.5,1,0,2]).range(0,1),
|
|
interp: 4
|
|
);
|
|
|
|
//snd = [snd.at(0),snd.at(1)] + [snd.at(3),snd.at(2)] * 0.2;
|
|
snd = Splay.ar(snd * amp, spread:1);
|
|
//Mix(snd * 0.25);
|
|
|
|
//Out.ar(out, snd);
|
|
}.play(s,[\bufnum, b]);
|
|
)
|
|
|
|
s.scope
|
|
|
|
|
|
|
|
{ Mix.new([ PinkNoise.ar(0.1), FSinOsc.ar(801, mul:0.1), LFSaw.ar(40, mul:0.1)]) }.play
|
|
|
|
|
|
|
|
play({
|
|
VarSaw.ar(
|
|
LFPulse.kr(3, 0, 0.3, 200, 200),
|
|
0,
|
|
LFTri.kr(1.0).range(0,1), //width
|
|
0.1)
|
|
});
|
|
|
|
(
|
|
play({
|
|
VarSaw.ar([50,50.5], 0, SinOsc.kr(0.01,1).range(0.05,0.95), 0.5)!2
|
|
+ VarSaw.ar([101,99.3], 0, SinOsc.kr(0.06,0).range(0.2,0.8) , 0.5)!2 * 0.2
|
|
});)
|
|
|
|
|
|
(
|
|
SynthDef(\softSaw, {
|
|
arg out = 0, freq = 40, detune = 0.1, amp = 1, pan = 0,
|
|
gate = 1, attackTime = 0.1, susLevel = 1.0, releaseTime = 1.0;
|
|
var env, snd;
|
|
detune = detune * 0.1;
|
|
amp = amp * 0.4;
|
|
|
|
env = Linen.kr(gate, attackTime, susLevel, releaseTime);
|
|
|
|
snd = VarSaw.ar(
|
|
freq: [freq, freq * (1.003+detune)],
|
|
width: SinOsc.kr(0.01,0.2).range(0.05,0.095));
|
|
snd = snd + VarSaw.ar(
|
|
freq: [(freq*2 * (1.001-detune)),(freq*2 * (1+detune))],
|
|
width: SinOsc.kr(0.06,0.8).range(0.2,0.8));
|
|
|
|
|
|
snd = Balance2.ar(snd.at(0), snd.at(1), pos: pan);
|
|
|
|
snd = snd * amp * env;
|
|
|
|
Out.ar(out, snd);
|
|
|
|
}).play);
|
|
|
|
|
|
|
|
Linen.kr()
|
|
|
|
|
|
|
|
|
|
|
|
(
|
|
SynthDef(\granulator, {
|
|
|
|
arg out = 0, bufnum = ~smpBuffers.ar(0), grainDur=0.2, grainFreq=140, amp=0.8,
|
|
gate = 1, attackTime = 0.1, susLevel = 1.0, releaseTime = 1.0,
|
|
spread = 1, pan = 0, seed = 1924, id=0;
|
|
var snd, env;
|
|
|
|
RandID.ir(id);
|
|
RandSeed.ir(1, seed);
|
|
spread = spread * abs(abs(pan)-1);
|
|
|
|
env = Linen.kr(gate, attackTime, susLevel, releaseTime);
|
|
snd = GrainBuf.ar(numChannels: 1,
|
|
trigger: Impulse.kr(grainFreq * LFNoise0.kr(grainFreq).range(0.5,1.5)),
|
|
dur: grainDur,
|
|
sndbuf: bufnum,
|
|
rate: [0.2,0.3,0.4,0.5],
|
|
pos:LFTri.ar(0.0001, iphase:[IRand(0,1),IRand(0,1),IRand(0,1),IRand(0,1)]).range(0,1),
|
|
interp: 4,
|
|
maxGrains: 1024,
|
|
pan: [ LFNoise1.kr(0.1).range(-1,1),
|
|
LFNoise1.kr(0.1).range(-1,1),
|
|
LFNoise1.kr(0.1).range(-1,1),
|
|
LFNoise1.kr(0.1).range(-1,1) ]
|
|
);
|
|
snd = Splay.ar(snd, spread:spread, level:amp, center: pan);
|
|
snd = snd * env;
|
|
|
|
Out.ar(out, snd);
|
|
}).play;
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
spread
|
|
|
|
(
|
|
x = { arg spread=1, level=0.2, center=0.0;
|
|
Splay.ar(
|
|
SinOsc.ar( { |i| LFNoise2.kr(1).exprange(200, 4000) } ! 2, mul: { LFNoise2.kr(1).exprange(0.01,1)}!2),
|
|
spread,
|
|
level,
|
|
center
|
|
);
|
|
}.play;
|
|
)
|
|
|
|
x.set(\spread, 1, \center, 0); // full stereo
|
|
x.set(\spread, 0.5, \center, 0); // less wide
|
|
x.set(\spread, 0, \center, 0); // mono center
|
|
x.set(\spread, 0.5, \center, 0.5);
|
|
// spread from center to right
|
|
x.set(\spread, 0, \center, -1); // all left
|
|
x.set(\spread, 1, \center, 0); // full stereo |