diff --git a/ark_d.scd b/ark_d.scd index c8054a9..5adcff2 100644 --- a/ark_d.scd +++ b/ark_d.scd @@ -1,15 +1,30 @@ // =========================================================== // Ark/D, amorphic (2020) // =========================================================== - - ( -// load libs 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: @@ -18,14 +33,114 @@ Server.default.waitForBoot { // 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)]) + +/////////////////////////////////////////////////////////////////////////////////////// + +//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 @@ -35,4 +150,172 @@ SynthDef("sawM", { -// load patterns \ No newline at end of file +// 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 \ No newline at end of file diff --git a/lib/bufPlayer.scd b/lib/bufPlayer.scd new file mode 100644 index 0000000..f8c64d6 --- /dev/null +++ b/lib/bufPlayer.scd @@ -0,0 +1,7 @@ +( +SynthDef(\bufPlayer, {|out = 0, bufnum = 0 | + Out.ar(out, + PlayBuf.ar(1, bufnum, BufRateScale.kr(bufnum), loop: 1.0) + ) +}).add; +); diff --git a/lib/granulators.scd b/lib/granulators.scd new file mode 100644 index 0000000..95a8bb0 --- /dev/null +++ b/lib/granulators.scd @@ -0,0 +1,32 @@ +( +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); +}).add; +); diff --git a/lib/softSaw.scd b/lib/softSaw.scd new file mode 100644 index 0000000..5e2d21e --- /dev/null +++ b/lib/softSaw.scd @@ -0,0 +1,26 @@ +( +SynthDef(\softSaw, { + arg out = 0, freq = 40, oscdetune = 0.1, amp = 1, pan = 0, + gate = 1, attackTime = 0.1, susLevel = 1.0, releaseTime = 1.0; + var env, snd; + oscdetune = oscdetune * 0.1; + amp = amp * 0.4; + + env = Linen.kr(gate, attackTime, susLevel, releaseTime, doneAction:2); + + snd = VarSaw.ar( + freq: [freq, freq * (1.003 + oscdetune)], + width: SinOsc.kr(0.01,0.2).range(0.05,0.095)); + snd = snd + VarSaw.ar( + freq: [(freq*2 * (1.001 - oscdetune)),(freq*2 * (1 + oscdetune))], + 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); + +}).add; +); \ No newline at end of file diff --git a/smp/Ljuben Dimkaroski plays the Divje Babe Bone Flute-AZCWFcyxUhQ.wav b/smp/Ljuben Dimkaroski plays the Divje Babe Bone Flute-AZCWFcyxUhQ.wav new file mode 100644 index 0000000..ec007f1 Binary files /dev/null and b/smp/Ljuben Dimkaroski plays the Divje Babe Bone Flute-AZCWFcyxUhQ.wav differ