the code:
~numChannels = 2;
s.options.numOutputBusChannels_(~numChannels);
~filePath = "/Users/keenanmccracken/Desktop/07051161.wav";
s.waitForBoot{
fork{
// b = Buffer.read(s, "~/testsound/harmonica1.wav".asAbsolutePath).normalize;
b = Buffer.read(s, ~filePath.asAbsolutePath).normalize;
s.sync; "Done loading buffer".postln;
}
}
)
(
Ndef(\cloud, {|gdur=0.1, buffer, density=1.0, rate=0.95, shape=0.5, ratespread=0.0, pos=0.25, posspread=0.0, rand=1.0, overlap=0.0, amp=0.5|
var cloud;
var numGrains=4;
var numBufChans=2;
// Normalize params
density = density.linexp(0.0,1.0,0.0001,100.0);
rate = rate.linexp(0.0,1.0,0.01,10.0);
cloud = Array.fill(numGrains, {|gNum|
var coef=gNum+1/numGrains;
// Add tiny difference to each grain generator
var weight = Rand(0.9999,1.0);
var finalgdur = gdur * weight * overlap.linlin(0.0,1.0,1.0,4.0);
// Deterministic
var imp = Impulse.ar(density, phase: coef);
// Random impulses
var dust = Dust2.ar(density);
// Crossfade between them
var trig = XFade2.ar(imp, dust, rand.linlin(0.0,1.0,-1.0,1.0));
// Grain envelope
// Soft envelope
var sineenv = EnvGen.ar(
Env.sine,
trig,
timeScale: finalgdur
);
// Hard envelope
var clickenv = EnvGen.ar(
Env([0,1,1,0], [0,1,0]),
trig,
timeScale: finalgdur
);
// Faded
var env = XFade2.ar(sineenv, clickenv, shape.linlin(0.0,1.0,-1.0,1.0));
// Calculate position in buffer
var position = (weight * pos + (posspread * coef)).wrap(0.0,1.0) * BufFrames.ir(buffer);
// Calculate playback rate
var playbackrate = weight * rate * BufRateScale.ir(buffer);
var sig = PlayBuf.ar(
numBufChans,
buffer,
ratespread * (gNum + 1) + 1 * playbackrate,
trig,
position,
loop: 0.0,
doneAction: 0
);
LeakDC.ar(env * sig)
});
// Normalize sound levels a bit
cloud = cloud / numGrains;
cloud = cloud * amp;
Splay.ar(cloud.flatten)
}).set(\buffer, b, \wet1, 0.35).play;
Ndef(\cloud)[1] = \filter -> {|in, verbtime=10, room=5|
JPverb.ar(in, verbtime, 0, room);
};
)
// Gui
(
Spec.add(\pos, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\density, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\rate, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\shape, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\ratespread, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\posspread, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\rand, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\overlap, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Spec.add(\gdur, ControlSpec( minval: 0.001, maxval: 1.0, warp: \lin, step: 0.0, default: 0.1));
Spec.add(\wet1, ControlSpec( minval: 0.0, maxval: 1.0, warp: \lin, step: 0.0, default: 0.5));
Ndef(\cloud).gui;
)
// Add some modulation
(
Ndef(\saw, {|f=0.001| LFSaw.kr(f).unipolar}).copy(\saw2).set(\f, 0.001);
Ndef(\sine, {|f=0.0151| SinOsc.kr(f).unipolar}).copy(\sine2).set(\f, 0.093211);
Ndef(\cloud).map(\posspread, Ndef(\saw), \stochastic, Ndef(\saw2), \rand, Ndef(\sine), \density, Ndef(\sine2));
And the error message I get:
Instance of Buffer { (0x11d947af8, gc=20, fmt=00, flg=00, set=03)
instance variables [8]
server : instance of Server (0x1189a1548, size=30, set=5)
bufnum : Integer 0
numFrames : Integer 3271044
numChannels : Integer 2
sampleRate : Float 44100.000000 00000000 40E58880
path : "/Users/keenanmccracken/Desktop/07051161.wav"
startFrame : Integer 0
doOnInfo : nil
}
ARGS:
PATH: /Users/keenanmccracken/Desktop/madsgran.scd
CALL STACK:
DoesNotUnderstandError:reportError
arg this = <instance of DoesNotUnderstandError>
Nil:handleError
arg this = nil
arg error = <instance of DoesNotUnderstandError>
Thread:handleError
arg this = <instance of Thread>
arg error = <instance of DoesNotUnderstandError>
Object:throw
arg this = <instance of DoesNotUnderstandError>
Object:doesNotUnderstand
arg this = <instance of Buffer>
arg selector = 'rate'
arg args = [*0]
< FunctionDef in Method ProxyNodeMap:controlNames >
arg key = 'buffer'
arg value = <instance of Buffer>
var rate = nil
Dictionary:keysValuesArrayDo
arg this = <instance of ProxyNodeMap>
arg argArray = [*32]
arg function = <instance of Function>
var i = 8
var j = 2
var key = nil
var val = nil
var arraySize = nil
Dictionary:keysValuesDo
arg this = <instance of ProxyNodeMap>
arg function = <instance of Function>
ProxyNodeMap:controlNames
arg this = <instance of ProxyNodeMap>
var res = [*1]
NodeProxy:addNodeMapControlNames
arg this = <instance of Ndef>
arg objCtlNames = [*14]
arg except = [*4]
NodeProxy:controlKeys
arg this = <instance of Ndef>
arg except = [*4]
arg noInternalKeys = true
var list = [*0]
NodeProxy:gui
arg this = <instance of Ndef>
arg numItems = nil
arg bounds = nil
arg preset = nil
Interpreter:interpretPrintCmdLine
arg this = <instance of Interpreter>
var res = nil
var func = <instance of Function>
var code = "(
Spec.add(\pos, ControlSpec..."
var doc = nil
var ideClass = <instance of Meta_ScIDE>
Process:interpretPrintCmdLine
arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'rate' not understood.
RECEIVER: Buffer(0, 3271044, 2, 44100.0, /Users/keenanmccracken/Desktop/07051161.wav)